无忧启动论坛

标题: 求一个将应用程序的快捷方式创建并挂载到PE的桌面的批处理 [打印本页]

作者: 有阴也有阳    时间: 2017-12-2 09:58
标题: 求一个将应用程序的快捷方式创建并挂载到PE的桌面的批处理
本帖最后由 有阴也有阳 于 2018-4-23 11:12 编辑

        求一个将应用程序的快捷方式创建并挂载到PE的桌面的批处理,进入PE后一运行这个批处理,批处理的同级目录中

的应用程序的快捷方式就能被创建并被挂载到桌面,设同级目录里有3个应用程序,分别是X1.exe、X2.exe、X3.exe,

这个批处理应该如何写?

        在启动U盘中用的,在启动U盘里的目录结构是这样的:



        X1.exe装在X1文件夹中,X2.exe装在X2文件夹中,X3.exe装在X3文件夹中。

        我想通过分段载入的办法来解决,请问在PE中调用另外一个批处理的批处理命令应该如何写,比如调用Y文件夹中的A.bat

的批处理应该如何写?

        目前基本上获得了解决:







       双击“挂载常用软件的快捷方式到PE的桌面.bat”后,应用软件的快捷方式就能自动被挂载。

“挂载常用软件的快捷方式到PE的桌面.bat”的内容:

PECMD.EXE \A-在PE下使用的单文件版的工具软件\WinNTSetup_V3.8.7.3版\1.bat
PECMD.EXE \A-在PE下使用的单文件版的工具软件\EasyImageX_v1.62\1.bat
PECMD.EXE \A-在PE下使用的单文件版的工具软件\一键智能装机助理标准版V3.7.2\1.bat
PECMD.EXE \A-在PE下使用的单文件版的工具软件\安装Ghost系统的利器——DBCGhost.exe\1.bat
PECMD.EXE \A-在PE下使用的单文件版的工具软件\BIOS及UEFI引导修复\1.bat

1.bat的内容(只以挂载WinNTSetup的快捷方式的为例,其它的以此类推):

PECMD.EXE LINK %Desktop%\WinNTSetup_x86,WinNTSetup_x86.exe
PECMD.EXE LINK %Desktop%\WinNTSetup_x64,WinNTSetup_x64.exe

        目前就还差一个Diskgeniu-s.exe的快捷方式弄不上来,其1.bat的内容为:

PECMD.EXE LINK %Desktop%\DiskGeniu-s,DiskGeniu-s.exe

        但其快捷方式就是挂载不到桌面上。

        感谢网友“captain_g”和“永远的大象”、“mdyblog”的热心指点!谢谢!!!

        刚才又试了一下,在Win10x64  PE中也获得了成功:



......


        通过对集成在我的启动U盘里面的PE地逐一测试,发现:

        可以成功挂载快捷方式的PE有:

        2003  PE

        XP  PE  

        Win7  64位PE

        Win8.1  32位PE

        Win10  64位PE

        微PE  64位

        微PE  32位


        不能成功挂载快捷方式的PE有:

        Win7  32位PE

        Win8.1  64位PE

        Win10  32位PE

        补充:经过一番折腾,算是搞得比较理想了:

        1.能直接挂载的就直接挂载了,如:EasyImageX、WinNTSetup、DBCGhost.exe等程序。

        2.不能直接挂载的就先另外创建1个快捷方式,然后再用一个bat把这个快捷方式复制到桌面,例如:Diskgeniu-s  32/64位程序。

        3.连另外创建1个快捷方式也无法复制到桌面的,那就干脆做一个直接运行该程序的bat,只要直接运行这个bat,就能运行该程序,

如品牌通备份还原  32/64位程序。

        只要一运行“挂载常用软件的快捷方式到PE的桌面.bat”就能把下图中的红框里面的快捷方式全部挂载到PE的桌面:




         经过后来我不停地改进,终于弄得比较理想了(2017-12-26):

        1.进入PE,打开启动U盘——打开“A-在PE下使用的单文件版的工具软件”文件夹,双击运行里面的“A-挂载常用软件的快捷方式到PE的桌面.bat”:




        2.就能在我的启动U盘里面所集成的所有PE的桌面上面加载打红框里面的这些个应用程序和批处理的快捷方式

        1).2003  PE:



        2).XP  PE:



        3).Win7x32  PE:



        4).Win7x64  PE:



        5).Win8.1x32  PE:



        6).Win8.1x64  PE:



        7).Win10x32  PE:



        8).Win10x64  PE:



        9).微PEx32  V1.2:



        10).微PEx64  V1.2:



        11).微PEx32  V2.0:



        12).微PEx64  V2.0:




       经过我不断地改进,终于在32/64位的微PE、32/64位的Win8.1/10PE上实现了一进入PE的桌面“挂载常用软件及bat的快捷方式到PE

的桌面.bat”的快捷方式就已经自动被挂载到了PE的桌面,双击后,启动U盘里的常用软件及bat的快捷方式就能够被挂载到桌面:

        1.32/64位的微PE:



        2.32/64位的微PE:



        3.32位的Win8.1PE:



        4.32位的Win8.1PE:



        5.32位的Win8.1PE:



        6.64位的Win8.1PE:



        7.64位的Win8.1PE:



        8.32位的Win10PE:



        9.32位的Win10PE:



        10.64位的Win10PE:



        11.64位的Win10PE:



        剩下的2003  PE、XP  PE、32/64位的Win7  PE在技术上不是不能实现,而且在理论上也很简单,但具体操作起来过于繁琐,一旦升级更换,就会作废,

又要重新弄一遍,所以还是保持“进入PE,打开启动U盘——打开‘A-在PE下使用的单文件版的工具软件’文件夹,双击运行里面的‘A-挂载常用软件的快捷方式到

PE的桌面.bat’”的使用方法不变。

作者: captain_g    时间: 2017-12-2 10:43
本帖最后由 captain_g 于 2017-12-2 10:55 编辑

最不动脑筋的做法就是在批处理中写三行:
PECMD.EXE LINK %Desktop%\X1,X1.exe
PECMD.EXE LINK %Desktop%\X2,X2.exe
PECMD.EXE LINK %Desktop%\X3,X3.exe

也可以先搞好一个INI文件,内容类似这样:
LINK %Desktop%\GHOSTEXP,%CurDir%\GHOSTEXP.EXE
然后在批处理中PECMD.EXE LOAD 那个INI文件;
作者: 永远的大象    时间: 2017-12-2 11:08
本帖最后由 永远的大象 于 2017-12-2 12:58 编辑
  1. for /f "tokens=*" %%i in ('dir /ad /b') do mshta VBScript:Execute("Set a=CreateObject(""WScript.Shell""):Set b=a.CreateShortcut(a.SpecialFolders(""Desktop"") & ""\%%i.lnk""):b.TargetPath=""%~dp0%%i\%%i.exe"":b.WorkingDirectory=""%~dp0%%i"":b.Save:close")
复制代码

试试这个
缺点:程序文件名需要和文件夹名保持一致

PECMD可以用加载程序的方式来加载批处理
命令貌似是
PECMD EXEC ***.BAT
隐藏窗口的话,则在路径前面加个!,比如:
PECMD EXEC !***.BAT

至于批处理里面加载另一个批处理,可以用CALL
作者: 有阴也有阳    时间: 2017-12-2 11:08
captain_g 发表于 2017-12-2 10:43
最不动脑筋的做法就是在批处理中写三行:
PECMD.EXE LINK %Desktop%\X1,X1.exe
PECMD.EXE LINK %Desktop% ...

试了一下,无法挂载,谢谢你的热心帮助!
作者: 有阴也有阳    时间: 2017-12-2 13:25
永远的大象 发表于 2017-12-2 11:08
试试这个
缺点:程序文件名需要和文件夹名保持一致

试了一下:

call \Y\A.bat    不行,

PECMD EXEC \Y\A.bat   还是不行。

谢谢!!!
作者: 永远的大象    时间: 2017-12-2 13:48
本帖最后由 永远的大象 于 2017-12-2 22:49 编辑

参照你上面的需要,如果要用批处理实现的话,分成两个批处理:
一、搜索另一个批处理并执行,将其打包到WIM里面,加到启动执行,内容大致为:
  1. @echo off
  2. for %%i in ( C D E F G H I J K L M N O P Q R S T U V W X Y Z ) do if exist %%i:\Y\A.bat call %%i:\Y\A.bat
复制代码


二、创新快捷方式
  1. @echo off
  2. for /f "tokens=*" %%i in ('dir /ad /b') do mshta VBScript:Execute("Set a=CreateObject(""WScript.Shell""):Set b=a.CreateShortcut(a.SpecialFolders(""Desktop"") & ""\%%i.lnk""):b.TargetPath=""%~dp0%%i\%%i.exe"":b.WorkingDirectory=""%~dp0%%i"":b.Save:close")
复制代码


作者: mdyblog    时间: 2017-12-2 14:10
挂载常用软件到PE桌面.WCS.zip (456 Bytes, 下载次数: 45)


挂载常用软件到PE桌面.wcs 放到该目录, 自动加载该目录的EXE CMD BAT到桌面。

如果子目录 也放有本脚本拷贝, 自动调用子目录的脚本来处理子目录,
依次类推, 没有级数限制。

作者: 有阴也有阳    时间: 2017-12-2 14:44
本帖最后由 有阴也有阳 于 2017-12-2 14:56 编辑
mdyblog 发表于 2017-12-2 14:10
挂载常用软件到PE桌面.wcs 放到该目录, 自动加载该目录的EXE CMD BAT到桌面。

如果子目录 也放有 ...


自动不能加载目录的EXE CMD BAT到桌面,得手动——用鼠标双击才加载。


作者: mdyblog    时间: 2017-12-2 14:47
本帖最后由 mdyblog 于 2017-12-2 14:51 编辑
有阴也有阳 发表于 2017-12-2 14:44
自动不能加载目录的EXE CMD BAT到桌面,得手动——用鼠标双击才加载。


当然这样来!
什么程序 都得 启动他呀。 否则不就是病毒了。

在 PECMD.INI 中 启动他。
每次PE启动就能自动启动 。

PECMD.INI:
FORX \挂载常用软件到PE桌面.wcs,&&F,0,LOAD "%&F%"

在U盘胡某分区根目录,放个  \挂载常用软件到PE桌面.wcs
PE自动启动他。 它再启动子目录的 挂载常用软件到PE桌面.wcs 。。。。
作者: 有阴也有阳    时间: 2017-12-2 15:00
本帖最后由 有阴也有阳 于 2017-12-2 15:34 编辑
mdyblog 发表于 2017-12-2 14:47
当然这样来!
什么程序 都得 启动他呀。 否则不就是病毒了。


谢谢!!!,我弄明白了,是因为没有在PECMD.INI中添加:
FORX \挂载常用软件到PE桌面.wcs,&&F,0,LOAD "%&F%"

所以要手动。

        不过文件夹在启动U盘中,启动U盘插到不同的电脑上后其盘符——路径是不一样的,所以在PECMD.INI中启动U盘等的路径不好写,

还是到启动U盘里面的文件夹中直接点击“挂载常用软件的快捷方式到PE的桌面.bat”好了,谢谢你的热心回复!谢谢!!!
作者: lintrainwy    时间: 2017-12-2 15:03
@ECHO OFF
setlocal ENABLEDELAYEDEXPANSION
Title Origin 2017 安装
mode con: cols=65 lines=25
color 0A

:-------------------------------------
echo 检查 管理员权限...
        %Windir%\System32\FLTMC.exe >nul 2>&1 && goto gotAdmin
        set "vbs=CreateObject(""Shell.Application"").ShellExecute ""%~0"", """", """", ""runas"", 1:window.close"
        mshta VBScript:Execute("%vbs%") & exit /b
:gotAdmin
    cls & pushd "%CD%"  & CD /D "%~dp0"
:--------------------------------------

set "PathBat=%~dp0"
set "PathBat=%PathBat:~0,-1%"
set "PathDesktop=%USERPROFILE%\Desktop"



::=======================================
echo 创建快捷方式
echo.
set "PathExe=%PathBat%"

set "PathLnk=%PathDesktop%"
set "Lnk=Test.lnk"
set "Target=%PathExe%\Test.exe"
set "Arguments="
set "WorkingDir=%PathExe%"
set "Hotkey="
set "WindowStyle=1"
set "Description=描述"

echo 创建 %Lnk%
call :CreateShort "%PathLnk%\%Lnk%" "%Target%" "%Arguments%" "%WorkingDir%\" "%Hotkey%" "%WindowStyle%" "%Description%"

echo.
echo 快捷方式创建完成!
choice /c YN /t 1 /d Y>nul

goto :EOF
===================================================
::LnkPath               快捷方式位置
::LnkFile               快捷方式名
::TargetPath            目标
::Arguments             参数
::WorkingDirectory      起始位置
::Hotkey                快捷键
::WindowStyle           窗口启动状态
::Description           快捷方式备注
::IconLocation          快捷方式图标,不设则使用默认图标

:CreateShort
set "vbs=                        set a=CreateObject(""WScript.Shell"")"
set "vbs=%vbs%:        set b=a.CreateShortcut(""%~1"")"
set "vbs=%vbs%:        b.TargetPath=""%~2"""
set "vbs=%vbs%:        b.Arguments=""%~3"""
set "vbs=%vbs%:        b.WorkingDirectory=""%~4"""
set "vbs=%vbs%:        b.Hotkey=""%~5"""
set "vbs=%vbs%:        b.WindowStyle=""%~6"""
set "vbs=%vbs%:        b.Description=""%~7"""
set "vbs=%vbs%:        b.Save"
set "vbs=%vbs%:        close"
mshta VBScript:Execute("%vbs%")
goto :EOF

:EOF
作者: 永远的大象    时间: 2017-12-2 22:39
有阴也有阳 发表于 2017-12-2 13:25
试了一下:

call \Y\A.bat    不行,

之前是用手机,没仔细看,因为批处理里面要么是相对路径,要么是绝对路径,位置不确定的话必需先确定位置,所以这种情况下要用CALL的话,参照下面命令:
  1. for %%i in ( C D E F G H I J K L M N O P Q R S T U V W X Y Z ) do if exist %%i:\Y\A.bat call %%i:\Y\A.bat
复制代码

缺点:如果有两个盘符存在 \Y\A.bat ,两个\Y\A.bat均会被执行一次

额外小提示:CALL是可以返回的,返回的方式有两种:一是执行到批处理结束,二是用exit /b 返回,但是,exit是直接退出,不能用来做返回
作者: 2012jiashanni    时间: 2017-12-4 17:13
API枚举目录下的EXE 并创建文件 CMD不知道怎么写
作者: netarrow    时间: 2017-12-5 13:09
看不懂,就是觉得高人多多。
作者: 有阴也有阳    时间: 2017-12-26 09:49
终于弄得比较理想了
作者: 有阴也有阳    时间: 2018-1-9 17:10
本帖最后由 有阴也有阳 于 2018-1-9 17:11 编辑
mdyblog 发表于 2017-12-2 14:47
当然这样来!
什么程序 都得 启动他呀。 否则不就是病毒了。


        我的PE是PE的ISO文件用G4D0.4.6a和XorBoot  Uefi  0.24整体启动,故而无法直接使用,变通了一下,终于可以使用了,

目前只在32/64位的微PE  V1.2中使用:

WEPE.INI:

//设置自定义桌面壁纸
IFEX %CurDrv%\WEPE\WallPaper.JPG,FILE %CurDrv%\WEPE\WallPaper.JPG=>%SystemRoot%\web\wallpaper\Windows\img0.jpg

//以下为其它任务
FORX \A-在PE下使用的单文件版的工具软件\挂载常用bat的快捷方式到PE的桌面.wcs,&&F,0,LOAD "%&F%"

        效果图:

        1.



        2.




        谢谢你的热心指点,谢谢!!!





作者: lintrainwy    时间: 2018-1-9 17:23
本帖最后由 lintrainwy 于 2018-1-9 17:27 编辑
2012jiashanni 发表于 2017-12-4 17:13
API枚举目录下的EXE 并创建文件 CMD不知道怎么写


FOR /F "usebackq tokens=* delims=" %%i in (`dir /b^|findstr ".exe$"`) do (
        echo 找到:%%i
)
作者: icevan    时间: 2018-1-10 21:11
论坛里有这个批处理。搜PETOOL就出来了 很多
贴 一个
PETOOLS.INI 由PECMD调用

  1. TIPS 加载PETOOLS工具,到开始菜单...,3000,1,#1
  2. FORX *ab @\PETOOLS,TOOLS,0,EXEC !%Windir%\SYSTEM32\PETOOLS.cmd %TOOLS%
复制代码


PETOOLS.CMD 可以把指定目录下包括子目录下的外置程序添加到菜单和桌面

  1. @echo off
  2. if "%~1"=="" goto :eof
  3. if not defined StartMenu goto :eof
  4. if "%~1"=="merge" goto :merge
  5. if not exist "%~1" goto :eof
  6. SET "BASE_DIR=%~1"
  7. SET "外置程序=%~d1盘_外置程序"
  8. SET "外置程序=%StartMenu%\%外置程序::=%"
  9. CALL,SET "附到桌面=%%外置程序:%StartMenu%=%Desktop%%%"
  10. SET "_TF=%WinDir%\T_PETOOLS_%base_dir:~0,1%_"
  11. IF EXIST "%外置程序%" RD /S /Q "%外置程序%" 2>nul
  12. IF EXIST "%附到桌面%" RD /S /Q "%附到桌面%" 2>nul
  13. :START
  14. DEL "%_TF%*.*" 2>nul
  15. PUSHD "%~F1"
  16. >%_TF%LST.lst dir /s/a/b *.wim *.cmd *.bat *.exe readme*.txt 使用说明*.txt
  17. POPD
  18. PUSHD "%WinDir%"
  19. for /f "usebackq delims=" %%i in (%_TF%LST.lst) do CALL :MAKE_LINK "%%i"
  20. ECHO.EXEC !%~F0 merge "%外置程序%" >>%_TF%LNK.INI
  21. ECHO.EXEC !%~F0 merge "%附到桌面%" >>%_TF%LNK.INI
  22. ECHO.FILE %_TF%LNK.INI>>%_TF%LNK.INI
  23. START PECMD LOAD %_TF%LNK.INI
  24. PUSHD "%~F1"
  25. >"%_TF%SETUP.lst" dir /s/a/b setup.cmd 2>nul
  26. >>"%_TF%SETUP.lst" dir /s/a/b setup.bat 2>nul
  27. POPD
  28. if exist "%_TF%SETUP.lst" For /f "delims=" %%i in ('type "%_TF%SETUP.lst"') do CALL :PETOOLS_REG %%i
  29. DEL %_TF%*.lst
  30. POPD
  31. goto :eof
  32. :MAKE_LINK
  33. SETLOCAL
  34. if "%~1"=="" goto :eof
  35. if /i "%~n1"=="setup" goto :eof
  36. SET ".=%~1"
  37. SET ".=%.:&=^&%"
  38. SET "PETOOLS=%~dpn1"
  39. call,SET "PETOOLS=%%PETOOLS:%BASE_DIR%=%外置程序%%%"
  40. SET "PETOOLS=%PETOOLS:&=^&%"
  41. echo.LINK %PETOOLS%,%.%>>%_TF%LNK.INI
  42. call,SET "PETOOLS=%%PETOOLS:%外置程序%=%附到桌面%%%"
  43. echo.LINK %PETOOLS%,%.%>>%_TF%LNK.INI
  44. GOTO :EOF
  45. :PETOOLS_REG
  46. pushd "%~dp1"
  47. PECMD EXEC !%~nx1
  48. POPD
  49. goto :eof
  50. :merge
  51. PUSHD %2||GOTO :EOF
  52. for /d %%i in ("%~2\*") do call :merge_lnk "%%i"
  53. POPD
  54. goto :eof
  55. :merge_lnk
  56. CD /D %1||GOTO :EOF
  57. for /d %%i in ("%~f1\*") do call %0 "%%i"
  58. CD /D %1||GOTO :EOF
  59. set n=
  60. for /f %%i in ('dir /a/b') do (
  61.     if defined n goto :eof
  62.     set n=1
  63. )
  64. for /f "usebackq delims=" %%i in (`dir /a/b`) do move /y "%%i" ..\
  65. cd..&&rd %1
  66. goto :eof
复制代码

作者: 有阴也有阳    时间: 2018-1-10 21:30
icevan 发表于 2018-1-10 21:11
论坛里有这个批处理。搜PETOOL就出来了 很多
贴 一个
PETOOLS.INI 由PECMD调用

谢谢!不大合我的需要,PETOOLS文件夹要求挂载在PE的桌面,此批处理挂载在PE的开始菜单,而且我还要同时挂载许多其它应用程序和bat的快捷方式到PE的桌面......
作者: icevan    时间: 2018-1-10 21:33
这个是同时挂到桌面和开始菜单。

作者: 有阴也有阳    时间: 2018-1-10 21:37
icevan 发表于 2018-1-10 21:33
这个是同时挂到桌面和开始菜单。

抱歉!没有细看,很感谢你的热心提供,谢谢!!!但我自己弄得更简单方便——一双击“打开PETOOLS文件夹.bat”,PETOOLS文件夹就打开了......
作者: egowssc    时间: 2019-1-3 17:36
这个很好,学习了啊

作者: dzy    时间: 2019-1-3 17:59
请楼主分享一下,谢谢!
作者: guozhi1368    时间: 2020-4-16 11:00
好帖子,学习完涨了很多知识




欢迎光临 无忧启动论坛 (http://wuyou.net/) Powered by Discuz! X3.3