有阴也有阳 发表于 2017-12-2 09:58:42

求一个将应用程序的快捷方式创建并挂载到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”的热心指点!谢谢!!!

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



......


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

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

      2003PE

      XPPE

      Win764位PE

      Win8.132位PE

      Win1064位PE

      微PE64位

      微PE32位


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

      Win732位PE

      Win8.164位PE

      Win1032位PE

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

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

      2.不能直接挂载的就先另外创建1个快捷方式,然后再用一个bat把这个快捷方式复制到桌面,例如:Diskgeniu-s32/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).2003PE:



      2).XPPE:



      3).Win7x32PE:



      4).Win7x64PE:



      5).Win8.1x32PE:



      6).Win8.1x64PE:



      7).Win10x32PE:



      8).Win10x64PE:



      9).微PEx32V1.2:



      10).微PEx64V1.2:



      11).微PEx32V2.0:



      12).微PEx64V2.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:



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

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

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

captain_g 发表于 2017-12-2 10:43:28

本帖最后由 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:06

本帖最后由 永远的大象 于 2017-12-2 12:58 编辑

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:31

captain_g 发表于 2017-12-2 10:43
最不动脑筋的做法就是在批处理中写三行:
PECMD.EXE LINK %Desktop%\X1,X1.exe
PECMD.EXE LINK %Desktop% ...

试了一下,无法挂载,谢谢你的热心帮助!

有阴也有阳 发表于 2017-12-2 13:25:59

永远的大象 发表于 2017-12-2 11:08
试试这个
缺点:程序文件名需要和文件夹名保持一致



试了一下:

call \Y\A.bat    不行,

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

谢谢!!!

永远的大象 发表于 2017-12-2 13:48:03

本帖最后由 永远的大象 于 2017-12-2 22:49 编辑

参照你上面的需要,如果要用批处理实现的话,分成两个批处理:
一、搜索另一个批处理并执行,将其打包到WIM里面,加到启动执行,内容大致为:
@echo off
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


二、创新快捷方式
@echo off
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:36




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

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

有阴也有阳 发表于 2017-12-2 14:44:29

本帖最后由 有阴也有阳 于 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:51

本帖最后由 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:23

本帖最后由 有阴也有阳 于 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: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:44

有阴也有阳 发表于 2017-12-2 13:25
试了一下:

call \Y\A.bat    不行,


之前是用手机,没仔细看,因为批处理里面要么是相对路径,要么是绝对路径,位置不确定的话必需先确定位置,所以这种情况下要用CALL的话,参照下面命令:
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:52

API枚举目录下的EXE 并创建文件 CMD不知道怎么写

netarrow 发表于 2017-12-5 13:09:57

看不懂,就是觉得高人多多。{:1_186:}

有阴也有阳 发表于 2017-12-26 09:49:09

终于弄得比较理想了

有阴也有阳 发表于 2018-1-9 17:10:42

本帖最后由 有阴也有阳 于 2018-1-9 17:11 编辑

mdyblog 发表于 2017-12-2 14:47
当然这样来!
什么程序 都得 启动他呀。 否则不就是病毒了。



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

目前只在32/64位的微PEV1.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.




      谢谢你的热心指点,谢谢!!!{:1_186:}




lintrainwy 发表于 2018-1-9 17:23:36

本帖最后由 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:14

论坛里有这个批处理。搜PETOOL就出来了 很多
贴 一个
PETOOLS.INI 由PECMD调用

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

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

@echo off
if "%~1"=="" goto :eof
if not defined StartMenu goto :eof
if "%~1"=="merge" goto :merge
if not exist "%~1" goto :eof
SET "BASE_DIR=%~1"
SET "外置程序=%~d1盘_外置程序"
SET "外置程序=%StartMenu%\%外置程序::=%"
CALL,SET "附到桌面=%%外置程序:%StartMenu%=%Desktop%%%"
SET "_TF=%WinDir%\T_PETOOLS_%base_dir:~0,1%_"
IF EXIST "%外置程序%" RD /S /Q "%外置程序%" 2>nul
IF EXIST "%附到桌面%" RD /S /Q "%附到桌面%" 2>nul
:START
DEL "%_TF%*.*" 2>nul
PUSHD "%~F1"
>%_TF%LST.lst dir /s/a/b *.wim *.cmd *.bat *.exe readme*.txt 使用说明*.txt
POPD
PUSHD "%WinDir%"
for /f "usebackq delims=" %%i in (%_TF%LST.lst) do CALL :MAKE_LINK "%%i"
ECHO.EXEC !%~F0 merge "%外置程序%" >>%_TF%LNK.INI
ECHO.EXEC !%~F0 merge "%附到桌面%" >>%_TF%LNK.INI
ECHO.FILE %_TF%LNK.INI>>%_TF%LNK.INI
START PECMD LOAD %_TF%LNK.INI
PUSHD "%~F1"
>"%_TF%SETUP.lst" dir /s/a/b setup.cmd 2>nul
>>"%_TF%SETUP.lst" dir /s/a/b setup.bat 2>nul
POPD
if exist "%_TF%SETUP.lst" For /f "delims=" %%i in ('type "%_TF%SETUP.lst"') do CALL :PETOOLS_REG %%i
DEL %_TF%*.lst
POPD
goto :eof
:MAKE_LINK
SETLOCAL
if "%~1"=="" goto :eof
if /i "%~n1"=="setup" goto :eof
SET ".=%~1"
SET ".=%.:&=^&%"
SET "PETOOLS=%~dpn1"
call,SET "PETOOLS=%%PETOOLS:%BASE_DIR%=%外置程序%%%"
SET "PETOOLS=%PETOOLS:&=^&%"
echo.LINK %PETOOLS%,%.%>>%_TF%LNK.INI
call,SET "PETOOLS=%%PETOOLS:%外置程序%=%附到桌面%%%"
echo.LINK %PETOOLS%,%.%>>%_TF%LNK.INI
GOTO :EOF
:PETOOLS_REG
pushd "%~dp1"
PECMD EXEC !%~nx1
POPD
goto :eof
:merge
PUSHD %2||GOTO :EOF
for /d %%i in ("%~2\*") do call :merge_lnk "%%i"
POPD
goto :eof
:merge_lnk
CD /D %1||GOTO :EOF
for /d %%i in ("%~f1\*") do call %0 "%%i"
CD /D %1||GOTO :EOF
set n=
for /f %%i in ('dir /a/b') do (
    if defined n goto :eof
    set n=1
)
for /f "usebackq delims=" %%i in (`dir /a/b`) do move /y "%%i" ..\
cd..&&rd %1
goto :eof

有阴也有阳 发表于 2018-1-10 21:30:15

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


谢谢!不大合我的需要,PETOOLS文件夹要求挂载在PE的桌面,此批处理挂载在PE的开始菜单,而且我还要同时挂载许多其它应用程序和bat的快捷方式到PE的桌面......

icevan 发表于 2018-1-10 21:33:23

这个是同时挂到桌面和开始菜单。

有阴也有阳 发表于 2018-1-10 21:37:06

icevan 发表于 2018-1-10 21:33
这个是同时挂到桌面和开始菜单。

抱歉!没有细看,很感谢你的热心提供,谢谢!!!但我自己弄得更简单方便——一双击“打开PETOOLS文件夹.bat”,PETOOLS文件夹就打开了......

egowssc 发表于 2019-1-3 17:36:09

这个很好,学习了啊

dzy 发表于 2019-1-3 17:59:52

请楼主分享一下,谢谢!

guozhi1368 发表于 2020-4-16 11:00:43

好帖子,学习完涨了很多知识
页: [1]
查看完整版本: 求一个将应用程序的快捷方式创建并挂载到PE的桌面的批处理