|
对 chenall 老大 petools第三版的小建议
先说明下 俺对chenall 老大的敬仰之心有如涛涛江水............
这只是个小建议,可能是我把复杂问题简单化了
1.感觉一般我们能把程序加入到 petools 文件夹,都是先要经过一些整理的,或者在下载这个程序时,文件夹里已经有了 setup.cmd,内容包含了注册等信息,如直接用第三版 会重复一些安装步骤,还不如大家形成习惯,加每个程序时,都写一个setup.cmd,把第三版的注册等过程序免掉。面面俱到没有错,可有一些规则还是好的,免得乱。
2.用第三版调用 setup.cmd 时,不知何故,本来有n个setup.cmd,但只能执行一个,可能是用 “Call" 命令,在第一个setup.cmd执行到 exit 后把主程序也关掉了,又或者是某个setup.cmd有什么问题....本来想找找原因的,可突然我想到用 pecmd 应该会更好一些,可以让每个setup.cmd单独同时执行,也可加快安装速度,试了一下,没发现什么问题,跟大家分享下:
if exist "%_TF%SETUP.lst" For /f "delims=" %%i in ('type "%_TF%SETUP.lst"') do (
pecmd.exe exec !cmd.exe /c "%%i"
)
以下是我对这个小建议的整理,复制后存为 搜索petools.cmd ,在 winipe.ini中加入 FORX @\PETOOLS,TOOLS,0,EXEC !文件路径\搜索petools.cmd %TOOLS% 就可以了,代码中删除对.reg和.ini文件的操作,只查找 setup.cmd 或 setup.bat 并执行安装(朋友担心并行执行程序会使低配置电脑卡死,在pecmd里加了个=,变为依次执行了)
______________________________________________________________________
@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%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 (
pecmd.exe exec =!cmd.exe /c "%%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
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
[ 本帖最后由 网虫2008 于 2009-12-23 19:15 编辑 ] |
|