chenall发表于: 2009-12-22 13:21
- @echo off
- if "%~1"=="" goto :eof
- if not defined StartMenu goto :eof
- if not exist "%~1" goto :eof
- SET "BASE_DIR=%~1"
- SET "外置程序=外置程序_%~d1盘"
- SET "外置程序=%StartMenu%\%外置程序::=%"
- IF EXIST "%外置程序%" RD /S /Q "%外置程序%"
- :START
- del "%temp%\PETOOLS_*.lst" 2>nul
- PUSHD "%~F1"
- >"%temp%\PETOOLS_LST.lst" dir /s/a/b *.wim *.cmd *.bat *.exe readme*.txt 使用说明*.txt
- POPD
- PUSHD "%TEMP%"
- for /f "usebackq delims=" %%i in (PETOOLS_LST.lst) do CALL :MAKE_LINK "%%i"
- START PECMD LOAD PETOOLS_LNK.INI
- PUSHD "%~F1"
- >"%temp%\PETOOLS_REG.lst" dir /s/a/b *.REG 2>nul
- >"%temp%\PETOOLS_INF.lst" dir /s/a/b setup.inf 2>nul
- POPD
- if exist PETOOLS_REG.LST for /f "usebackq delims=" %%i in (PETOOLS_REG.LST) do REGEDIT /S "%%i"
- if exist PETOOLS_INF.lst for /f "usebackq delims=" %%i in (PETOOLS_INF.lst) do RUNDLL32.EXE SETUPAPI.DLL,InstallHinfSection DefaultInstall 128 %%i
- IF EXIST PETOOLS_SETUP.LST for /f "usebackq delims=" %%i in (PETOOLS_SETUP.LST) do CALL :PETOOLS_SETUP "%%i"
- DEL petools_*.lst
- POPD
- goto :eof
- :MAKE_LINK
- SETLOCAL
- if "%~1"=="" goto :eof
- if /i "%~n1"=="setup" (
- echo.%%i >>PETOOLS_SETUP.LST
- goto :eof
- )
- SET ".=%~1"
- SET ".=%.:&=^&%"
- SET "PETOOLS=%~dpn1"
- call,SET "PETOOLS=%%PETOOLS:%BASE_DIR%=%外置程序%%%"
- SET "PETOOLS=%PETOOLS:&=^&%"
- echo.LINK %PETOOLS%,%.%>>PETOOLS_LNK.INI
- GOTO :EOF
- :PETOOLS_SETUP
- pushd "%~dp1"
- call %~nx1
- POPD
- goto :eof
chenall 发表于: 2009-12-22 20:07
- ::petools扩展目录搜索安装程序 by chenall [url=http://www.chenall.comhttp://www.chenall.com[/color[/url]]
- ::思路来源:[url=http://bbs.wuyou.net/forum.php?mod=viewthread&tid=140951http://bbs.wuyou.net/forum.php?mod=viewthread&tid=140951[/color[/url]]
- ::调用方式
- ::PETOOLS_LNK [PETOOLS目录]
- ::PECMD调用例子,查找所有petools目录。
- ::PECMD FORX @\PETOOLS,TOOLS,0,!EXEC CMD /C “PETOOLS_LINK %TOOLS%”
- ::2009-12-22 第三版,2009-12-23,修改了执行SETUP.BAT/CMD的调用方式为START /W,解决碰到EXIT退出的问题.
- ::2009-12-23,对于注册表文件只自动注册setup_reg.reg,其它的可以由setup.cmd来调用.以免重复执行
- ::具体无忧专贴:http://bbs.wuyou.net/forum.php?mod=viewthread&tid=158014
- @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%\%外置程序::=%"
- SET "_TF=%WinDir%\T_PETOOLS_%base_dir:~0,1%_"
- 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.FILE %_TF%LNK.INI>>%_TF%LNK.INI
- START PECMD LOAD %_TF%LNK.INI
- PUSHD "%~F1"
- >"%_TF%REG.lst" dir /s/a/b SETUP_REG.REG 2>nul
- >"%_TF%INF.lst" dir /s/a/b setup.inf 2>nul
- POPD
- if exist "%_TF%REG.LST" for /f "usebackq delims=" %%i in ("%_TF%REG.LST") do REGEDIT /S "%%i"
- if exist "%_TF%INF.lst" for /f "usebackq delims=" %%i in ("%_TF%INF.lst") do RUNDLL32.EXE SETUPAPI.DLL,InstallHinfSection DefaultInstall 128 %%i
- IF EXIST "%_TF%SETUP.LST" for /f "usebackq delims=" %%i in ("%_TF%SETUP.LST") do CALL :PETOOLS_SETUP %%i
- DEL %_TF%*.lst
- POPD
- goto :eof
- :MAKE_LINK
- SETLOCAL
- if "%~1"=="" goto :eof
- if /i "%~n1"=="setup" (
- echo.%1 >>"%_TF%SETUP.LST"
- goto :eof
- )
- SET ".=%~1"
- SET ".=%.:&=^&%"
- SET "PETOOLS=%~dpn1"
- call,SET "PETOOLS=%%PETOOLS:%BASE_DIR%=%外置程序%%%"
- SET "PETOOLS=%PETOOLS:&=^&%"
- echo.LINK %PETOOLS%,%.%>>%_TF%LNK.INI
- GOTO :EOF
- :PETOOLS_SETUP
- ::为什么需要这些步骤呢,因为考虑到有一些批处理对执行目录的要求(编写时没有考虑到),所以才需要进入批处理目录执行.否则可能会出错.表面上是执行了,其实执行的结果是错误的.用PECMD调用同样会有这样的问题.
- 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
Windows XP Professional-2009-12-21-22-38-16.png (58.09 KB, 下载次数: 319)
原帖由 h99h99 于 2009-12-22 14:43 发表
你给我们的,正是我们所需要的。这个工具考虑的太周到了,太好了!(就是慢点也无大碍),请问楼主(MicroPE的作者):这个工具在 Windows XP/2003 下能用吗?
原帖由 hhh333 于 2009-12-22 13:53 发表
chenall真是编程高手,以前总想去递规调用,而兄弟就是一个dir /s就搞定了,很巧,逻辑也很清晰。怪不得现在不点将g4d也交到你手上了。
有个建议,由于有的PE会将TEMP改变到硬盘或其他盘上,在这上面读写效率 ...
原帖由 pseudo 于 2009-12-22 16:46 发表
存为搜索安装.cmd,以
FORX @\PETOOLS,TOOLS,0,EXEC !%CurDir%\搜索安装.cmd %TOOLS%
调用。
上一版可搜索到多个盘,第二版只搜到一个盘,有点诡异,我再试试。
原帖由 hhh333 于 2009-12-23 13:17 发表
用法:(当然先要将chenall的文件存为PETOOLS_LINK.CMD)
1、用批处理调用此文件:建一个如下的批处理,与chenall的文件放在同一个地方即可运行它(chenall的说明中调用法是错误的)@ECHO OFF
REM 搜索PETOO ...
原帖由 gosun 于 2009-12-23 16:49 发表
想法不错,但要成为标准不易,用我的
EXEC !PELINK.CMD ALL2MENU "PETOOLS路径" "/AUTORUN:要运行的cmd程序"
你上面的改成:
EXEC !PELINK.CMD ALL2MENU "\PETOOLS\" "/AUTORUN:SETUP.CMD"
就行,P ...
原帖由 gosun 于 2009-12-23 17:11 发表
cmd也不错的,它的start就是并行执行的,和pecmd的exec差不多,start /wait 才是串行的,
和exec加=参数一样,但并行不见得总是好的,启动时CPU使用100%,并行不见得效率会提高,
有时反而会降低,只是在 ...
原帖由 chenall 于 2009-12-23 18:02 发表
我认为还是简单一些使用START /w 来调用,或许会比较好,因为并行时如果操作比较复杂,可能会造成死机.一般程序比较少的情况下使用并行是没有问题的,但如果需要执行的比较多,而且配置又不是很好的情况下,绝对会卡死.
原帖由 网虫2008 于 2009-12-23 18:10 发表
我用 start 命令试过的,不行,,如果怕并行有问题 加个 = 号吧,一条条来执行
if exist "%_TF%SETUP.lst" For /f "delims=" %%i in ('type "%_TF%SETUP.lst"') do (
pecmd.exe exec =!cmd.exe /c "%%i"
)
原帖由 haiou327 于 2010-2-28 00:43 发表
大方便了程序外置
chenall在CODE说明里改过来吧
PECMD FORX @\PETOOLS,TOOLS,0,EXEC !cmd /c "PETOOLS_LINK %TOOLS%"
82904
原帖由 chenall 于 2009-12-21 22:34 发表
用的是批处理配合PECMD的LINK功能。
大家可以试一下:
规则
1.有找到REG文件就先执行注册该文件。
2.有找到PECMD.INI就不进行创建快捷方式,而是直接调用PECMD.INI(用于自定义),并且不再找下一级目录。(新 ...
PETOOLS.JPG (55.41 KB, 下载次数: 368)
PETOOLS.JPG (107.95 KB, 下载次数: 192)
原帖由 haiou327 于 2010-3-19 14:08 发表
会渔才行,鱼始终会吃完......
PECMD FORX @X:\MYTOOLS,TOOLS,0,EXEC !cmd /c "PETOOLS_LINK %TOOLS%"
原帖由 hhh333 于 2009-12-22 13:53 发表
chenall真是编程高手,以前总想去递规调用,而兄弟就是一个dir /s就搞定了,很巧,逻辑也很清晰。怪不得现在不点将g4d也交到你手上了。
有个建议,由于有的PE会将TEMP改变到硬盘或其他盘上,在这上面读写效率 ...
原帖由 2012abc19701 于 2012-3-3 03:11 发表
PECMD-32.2012.1除夕版.多窗口多线-U65F裸机系统+18M酷MiniPE
http://bbs.wuyou.net/forum.php?mod=viewthread&tid=205402&extra=page%3D1
直接在内存中生成,不需要中间临时文件。
PETOOLS_LINK.WCS:
#!PECMD ...
欢迎光临 无忧启动论坛 (http://wuyou.net/) | Powered by Discuz! X3.3 |