无忧启动论坛

标题: 发一个重新写的petools搜索配置(第三版,修正) [打印本页]

作者: chenall    时间: 2009-12-21 22:34
标题: 发一个重新写的petools搜索配置(第三版,修正)
用的是批处理配合PECMD的LINK功能。
大家可以试一下:
规则
1.有找到REG文件就先执行注册该文件。
2.有找到PECMD.INI就不进行创建快捷方式,而是直接调用PECMD.INI(用于自定义),并且不再找下一级目录。(新版不支持这个)
3.有找到SETUP.BAT,setup.inf,setup.cmd,自动执行安装
4.搜到*.exe,*.wim,*.bat,*.cmd,并且不是SETUP.*的就创建快捷方式。
5.单个快捷方式合并(比如\其它工具\WINHEX\目录下只有一个WINHEX程序,则会把快捷方式创建在<其它工具>目录下).

Batchfile语言: [A href="http://fayaa.com/code/view/8492/]petools扩展目录搜索安装程序[/A]
::petools扩展目录搜索安装程序 by chenall http://www.chenall.com
::思路来源:http://bbs.wuyou.net/forum.php?mod=viewthread&tid=140951
::调用方式
::PETOOLS_LNK [PETOOLS目录]
::PECMD调用例子,查找所有petools目录。
::PECMD FORX @\PETOOLS,TOOLS,0,!EXEC PETOOLS_LINK %TOOLS%
::

@echo off
PATH %PATH%;%CD%
if not exist "%~F1" goto :eof
SET BASE_DIR=%~pnx1
::SET 外置程序="%StartMenu%\外置程序"
SET "外置程序=外置程序_%~d1盘"
SET "外置程序=%StartMenu%\%外置程序::=%"
IF EXIST "%外置程序%" RD /S /Q "%外置程序%"
MD "%外置程序%"
:START
PUSHD "%~F1"
for /f "delims=" %%a in ('dir /b/ad') do call :MAKE_LINK "%%a"
POPD
goto :eof

:MAKE_LINK
SETLOCAL
CD "%~1"
SET "PETOOLS=%~p1"
SET PETOOLS=%PETOOLS:~0,-1%
CALL,SET "PETOOLS=%%PETOOLS:%BASE_DIR%\=%%"
echo.%PETOOLS%
for %%i in (*.reg) do regedit /s "%%i"
if exist pecmd.ini (
pecmd load pecmd.ini
goto :eof
)
if exist setup.cmd call setup.cmd
if exist setup.bat call setup.bat
if exist setup.inf RUNDLL32.EXE SETUPAPI.DLL,InstallHinfSection DefaultInstall 128 "%%~fi"
for %%i in (*.exe,*.wim,*.bat,*.cmd) do (
if /i not "%%~ni"=="setup" PECMD LINK %外置程序%\%PETOOLS%\%%~ni,%%~fi
)
PUSHD "%外置程序%\%PETOOLS%\" 2>nul || GOTO :MAKE_LINK_D
set/an=0
for %%i in (*.lnk) do (
set/an+=1
)
if %n% LEQ 1 (
move /y *.lnk ..\
cd ..
rd /s /q "%外置程序%\%PETOOLS%\"
)
POPD
:MAKE_LINK_D
for /f "delims=" %%a in ('dir /b/ad') do call :MAKE_LINK "%%a"
goto :eof

第二版来了,看起来代码是更多了,但应该效率会有所提升,暂时还没有处理快捷方式合并


chenall发表于:  2009-12-22  13:21


第三版来了,处理了一下快捷方式的合并,解决临时文件冲突的问题(#15).
chenall 发表于:  2009-12-22  20:07

[ 本帖最后由 chenall 于 2010-3-3 23:14 编辑 ]

Windows XP Professional-2009-12-21-22-38-16.png (58.09 KB, 下载次数: 319)

Windows XP Professional-2009-12-21-22-38-16.png

作者: pseudo    时间: 2009-12-21 22:42
沙发!
chenall兄出手,必属精品。

对readme.txt类是否考虑?

[ 本帖最后由 pseudo 于 2009-12-21 22:44 编辑 ]
作者: feiyl    时间: 2009-12-21 22:49
支持,顶上……………
作者: chenall    时间: 2009-12-21 22:57
原帖由 pseudo 于 2009-12-21 22:42 发表
沙发!
chenall兄出手,必属精品。

对readme.txt类是否考虑?


没有哦,考虑一下觉得应该加上.呵呵,明天再加了.
作者: elai    时间: 2009-12-22 00:35
这个好,支持一个。。。~
作者: cmdy268    时间: 2009-12-22 11:04
谢谢C大,好东西,下来试试
作者: pseudo    时间: 2009-12-22 11:14
试了一下,批处理比较花时间,得优化一下。
作者: zxw    时间: 2009-12-22 11:30
我能想到的,chenall都想到了。没有什么新的建议。
倒是如pseudo所说,代码需要优化,速度提升是关键。
作者: chenall    时间: 2009-12-22 13:25
第二版来了,重新编写,调整了处理的方式。
先创建快捷方式,然后再处理注册,这样“看起来”会比较快。呵呵。
作者: hhh333    时间: 2009-12-22 13:53
chenall真是编程高手,以前总想去递规调用,而兄弟就是一个dir /s就搞定了,很巧,逻辑也很清晰。怪不得现在不点将g4d也交到你手上了。

有个建议,由于有的PE会将TEMP改变到硬盘或其他盘上,在这上面读写效率就很低,速度明显要慢,还是放到内存盘,速度明显要快,要么用windir来代替temp?

[ 本帖最后由 hhh333 于 2009-12-22 14:03 编辑 ]
作者: h99h99    时间: 2009-12-22 14:43
你给我们的,正是我们所需要的。这个工具考虑的太周到了,太好了!(就是慢点也无大碍),请问楼主(MicroPE的作者):这个工具在 Windows XP/2003 下能用吗?

[ 本帖最后由 h99h99 于 2009-12-22 14:45 编辑 ]
作者: chenall    时间: 2009-12-22 14:52
原帖由 h99h99 于 2009-12-22 14:43 发表
你给我们的,正是我们所需要的。这个工具考虑的太周到了,太好了!(就是慢点也无大碍),请问楼主(MicroPE的作者):这个工具在 Windows XP/2003 下能用吗?


这里面创建快捷方式使用的是PECMD,所以需要有一个PECMD.EXE程序。
作者: chenall    时间: 2009-12-22 14:54
原帖由 hhh333 于 2009-12-22 13:53 发表
chenall真是编程高手,以前总想去递规调用,而兄弟就是一个dir /s就搞定了,很巧,逻辑也很清晰。怪不得现在不点将g4d也交到你手上了。

有个建议,由于有的PE会将TEMP改变到硬盘或其他盘上,在这上面读写效率 ...


这个倒没有注意,用%WINDIR%也许会比较好些。呵呵。
作者: WLDNA    时间: 2009-12-22 15:55
支持一下,不错的思路,以后PE都兼容的话,大家就更方便了,呵呵

辛苦了,^_^
作者: pseudo    时间: 2009-12-22 16:46
存为搜索安装.cmd,以
FORX @\PETOOLS,TOOLS,0,EXEC !%CurDir%\搜索安装.cmd %TOOLS%
调用。
上一版可搜索到多个盘,第二版只搜到一个盘,有点诡异,我再试试。
作者: chenall    时间: 2009-12-22 17:46
原帖由 pseudo 于 2009-12-22 16:46 发表
存为搜索安装.cmd,以
FORX @\PETOOLS,TOOLS,0,EXEC !%CurDir%\搜索安装.cmd %TOOLS%
调用。
上一版可搜索到多个盘,第二版只搜到一个盘,有点诡异,我再试试。


汗,忘了这个是因为并发的原因,临时文件是同样的,所以当然出错了.下次改进.
作者: chenall    时间: 2009-12-22 20:10
OK,解决了,顺便处理一下快捷方式合并.如果没有问题就这样子了.
作者: elai    时间: 2009-12-22 20:28
这么快就第三版了,支持不断更新优化!
作者: 66369    时间: 2009-12-22 20:53
C大总是基础研究的先行者.

第三版最好.下来看下.
作者: caomaoLBL    时间: 2009-12-22 22:48
虽然自己不会做PE,但是改改还是没问题的,进来学习下!
作者: zxw    时间: 2009-12-22 23:39
YY后试用了一下,感觉不错。效果如图:

作者: zxw    时间: 2009-12-22 23:46
又将原refresh.ini的语句改为调用petools搜索批处理,较原refresh.ini处理稍慢,总体感觉不错。
只有一点疑惑:
就是上图的盘工具下的“开始程序菜单.WIM”本是AutoRuns目录下的,显示却忽略了AutoRuns目录。
建议将AutoRuns目录及其该目录下的文件都忽略掉。

[ 本帖最后由 zxw 于 2009-12-22 23:50 编辑 ]
作者: chenall    时间: 2009-12-22 23:57
关于上面的问题,见规则5.
5.单个快捷方式合并(比如\其它工具\WINHEX\目录下只有一个WINHEX程序,则会把快捷方式创建在<其它工具>目录下).
只有单目录时也同样,这样对于非单文件打包的程序,看起来会比较清爽,具体可以多试试就知道了.

要忽略了AutoRuns目录需要自己改下代码.比如在
:MAKE_LINK下添加一行
echo.%1|find /i "\AutoRuns\" &&goto :eof
::如果有包含AutoRuns就跳过.

[ 本帖最后由 chenall 于 2009-12-23 00:00 编辑 ]
作者: zxw    时间: 2009-12-23 00:04
谢谢chenall大指导,明白了。
忽略AutoRuns目录的修改方法我也想到了,不过写代码可没你这么快、这么简洁。

[ 本帖最后由 zxw 于 2009-12-23 00:05 编辑 ]
作者: wyl0205    时间: 2009-12-23 00:40
CHENALL的功力很是深厚,本打算用AU3写个类似的程序,看来可以省省了,明天有时间试试效果如何
作者: duxiyue    时间: 2009-12-23 01:56
高人出手,支持个。。。。
作者: dlwfdlikuan    时间: 2009-12-23 08:15
精品啊!出手不凡,支持了。
作者: 33445566    时间: 2009-12-23 11:26
哪位能详细说明怎么用
作者: mapeimapei    时间: 2009-12-23 11:36
现在基本就将petools彻底解决了吧。。
作者: hhh333    时间: 2009-12-23 13:17
用法:(当然先要将chenall的文件存为PETOOLS_LINK.CMD)
1、用批处理调用此文件:建一个如下的批处理,与chenall的文件放在同一个地方即可运行它(chenall的说明中调用法是错误的)
  1. @ECHO OFF
  2. REM 搜索PETOOLS目录下文件并建立快捷方式
  3. SET "StartMenu=%USERPROFILE%\「开始」菜单"
  4. for %%i in (z y x w v u t s r q p o n m l k j i h g f e d c b a) do if exist %%i:\PETOOLS PETOOLS_LINK %%i:\PETOOLS
复制代码
2、以前如果用petools.ini来调用有点麻烦:
先将原文件中的if not defined StartMenu goto :eof改为
if not defined StartMenu SET "StartMenu=%USERPROFILE%\「开始」菜单"

再改原先的petools.ini为:
FORX @\PETOOLS,TOOLS,0,EXEC !CMD /C "PETOOLS_LINK %TOOLS%"

[ 本帖最后由 hhh333 于 2009-12-23 13:27 编辑 ]
作者: 33445566    时间: 2009-12-23 14:08
原帖由 hhh333 于 2009-12-23 13:17 发表
用法:(当然先要将chenall的文件存为PETOOLS_LINK.CMD)
1、用批处理调用此文件:建一个如下的批处理,与chenall的文件放在同一个地方即可运行它(chenall的说明中调用法是错误的)@ECHO OFF
REM 搜索PETOO ...


谢谢H大大,成功搜索PETOOLS目录并加载到开始菜单
作者: 网虫2008    时间: 2009-12-23 16:45
标题: 对 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 编辑 ]
作者: edwinsunday    时间: 2009-12-23 16:49
呵呵,好建议, petools以后就更好了
作者: gosun    时间: 2009-12-23 16:49
想法不错,但要成为标准不易,用我的

EXEC !PELINK.CMD ALL2MENU "程序路径" "/AUTORUN:要运行的程序"

你上面的改成:

EXEC !PELINK.CMD ALL2MENU "\PETOOLS\" "/AUTORUN:SETUP.CMD"

就行,PELINK不会出现exit的情况的

不更方便?

对了,批文件是最好别用call,用start会好点,不会有那么多的灵异事件


[ 本帖最后由 gosun 于 2009-12-23 17:02 编辑 ]
作者: 网虫2008    时间: 2009-12-23 17:03
原帖由 gosun 于 2009-12-23 16:49 发表
想法不错,但要成为标准不易,用我的

EXEC !PELINK.CMD ALL2MENU "PETOOLS路径" "/AUTORUN:要运行的cmd程序"

你上面的改成:

EXEC !PELINK.CMD ALL2MENU "\PETOOLS\" "/AUTORUN:SETUP.CMD"

就行,P ...


嗯,又学习了一种方法,谢谢!

不过想了下,还是用pecmd 好一些,只要找到了就 单独 同时 的执行,会稳当和快一些吧
作者: gosun    时间: 2009-12-23 17:11
原帖由 网虫2008 于 2009-12-23 17:03 发表


嗯,又学习了一种方法,谢谢!

不过想了下,还是用pecmd 好一些,只要找到了就 单独 同时 的执行,会稳当和快一些吧


cmd也不错的,它的start就是并行执行的,和pecmd的exec差不多,start /wait 才是串行的,
和exec加=参数一样,但并行不见得总是好的,启动时CPU使用100%,并行不见得效率会提高,
有时反而会降低,只是在适当时候并行才高效,再有就是并发执行时,有些设置会相互覆盖干扰,
可能会发生灵异事件,稳定性会下降。。。


[ 本帖最后由 gosun 于 2009-12-23 17:15 编辑 ]
作者: 网虫2008    时间: 2009-12-23 17:30
原帖由 gosun 于 2009-12-23 17:11 发表


cmd也不错的,它的start就是并行执行的,和pecmd的exec差不多,start /wait 才是串行的,
和exec加=参数一样,但并行不见得总是好的,启动时CPU使用100%,并行不见得效率会提高,
有时反而会降低,只是在 ...


嗯,设置会相互覆盖干扰,这点倒是值得考虑,不过 wimpe.ini加载时也是一样的存在这种问题,

--_-   怎么说呢,pecmd.exe 是每个pe里自带的,PELINK.cmd 确还要下载添加什么,麻烦呀,可以考虑加个 = 号,让setup.cmd 一项项执行

pecmd.exe exec =!cmd.exe ......
作者: chenall    时间: 2009-12-23 18:02
我认为还是简单一些使用START /w 来调用,或许会比较好,因为并行时如果操作比较复杂,可能会造成死机.一般程序比较少的情况下使用并行是没有问题的,但如果需要执行的比较多,而且配置又不是很好的情况下,绝对会卡死.
作者: 网虫2008    时间: 2009-12-23 18:10
原帖由 chenall 于 2009-12-23 18:02 发表
我认为还是简单一些使用START /w 来调用,或许会比较好,因为并行时如果操作比较复杂,可能会造成死机.一般程序比较少的情况下使用并行是没有问题的,但如果需要执行的比较多,而且配置又不是很好的情况下,绝对会卡死.


我用 start 命令试过的,不行,,如果怕并行有问题 加个 = 号吧,一条条来执行

if exist "%_TF%SETUP.lst" For /f "delims=" %%i in ('type "%_TF%SETUP.lst"') do (
pecmd.exe exec =!cmd.exe /c "%%i"
)
作者: chenall    时间: 2009-12-23 18:14
使用start 碰到exit就不会退出了.如果start /w 不行,那PECMD =执行应该会是同样的
#32的建议不错,还是有个规则会比较好,
只要SETUP.CMD和SETUP.BAT就可以了,另外再加一个SETUP.REG.就差不多了,因为有时只需要导入注册表文件就不用再写SETUP.BAT了.
作者: gosun    时间: 2009-12-23 18:15
原帖由 网虫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"
)


用START运行批处理,如果文件名加“”的话,要用双参数:

START "%%i" "%%i"

第一个%%i是窗口名字,可以随便起,第二个才是真正调用的文件


[ 本帖最后由 gosun 于 2009-12-23 18:18 编辑 ]
作者: chenall    时间: 2009-12-23 18:17
@gosun
这也是使用start命令需要注意的一点,呵呵.有时候不注意就会出错.
作者: 网虫2008    时间: 2009-12-23 19:20
原帖由 chenall 于 2009-12-23 18:17 发表
@gosun
这也是使用start命令需要注意的一点,呵呵.有时候不注意就会出错.


要是这样,倒不如用 pecmd exec =!  命令调用了,多个进程就多个吧,反正运行之前也一样在调用pecmd.exe的

setup.cmd 各人有各人的写法,难免有哪个 就在start上卡住了,还不如 pecmd.exe 单来,成一个是一个 -_-
作者: rockliu1800    时间: 2009-12-23 20:05
先谢过楼主,在下来试试。
作者: rockliu1800    时间: 2009-12-23 20:25
跟各位老大学到不少东西,在此一并谢过。
作者: hhh333    时间: 2009-12-23 21:36
这种搜索方式有一些不可解决的缺点:

1、这种搜索总的来说比较费时间。
2、EXE多时无办法确认主程序(当然有的人建议与目录名同名的主程序而忽略其他,但有时其他也许也要建立快捷方式。这是不可调和的)。如这几天在弄拼音输入法,SOGOU、谷歌等里面的EXE就有不少,多数是些支持程序,都建立快捷方式的话毫无用处。
3、多数软件的主程序是英文,PETOOLS中的文件一多,形成的快捷方式都是英文的,看起来特别费力。(总不能将软件的主程序都改成中文吧)
4、如果花很多时间来弄PETOOLS的目录结构,让其更合理,还不如将这些时间用来编脚本也是足够了。

因此,这种搜索只能是一种补充,多数情况下还是尽量手工编写并做成WIM包。不过大侠们的编程技术,是很值得学习的。


比较合适放PETOOLS中的程序我想有几点:

1、程序比较少,基本上只有主程序是EXE文件。
2、程序名称的字面意思清楚,最好是中文的程序名。
3、做好的WIM小工具,装载时能够自我完成初始化。
作者: 潮退潮生    时间: 2009-12-24 13:12
为了省写点LINK而牺牲了速度不值得,LINK写好了也不见得就每天都改吧,我还是选择用LINK加以前的那个PETOOLS,反正放到PETOOLS的程序也不是很多,有时根本就没用到,一般情况下很多都打包成一个WIM外置。
作者: h99h99    时间: 2010-1-8 11:31
标题: 问题反馈
C 大:我测试了你的 petools 工具,发现有这样的问题:petools文件夹下各子文件夹下的  setup.inf 能够自动执行安装;setup_reg.reg 能够自动注册该文件,但就是 SETUP.BAT,setup.cmd 两类型的文件不能被自动执行,我在petools下 建 test 文件夹,test文件夹下就放一个setup.cmd ,setup.cmd 内就一句: md x:\test1 ,这样测试就是不成功。但双击 setup.cmd 肯定成功的。为什么呢?
要求:能否给个第三办版的纯文本格式文档给我测试?我怀疑从网页上复制下来的带有看不见的字符,造成不能正常运行的后果。谢谢大试师!

[ 本帖最后由 h99h99 于 2010-1-8 22:01 编辑 ]
作者: h99h99    时间: 2010-1-8 22:06
标题: 小小要求
要求:能否给个第三办版的纯文本格式文档给我测试?我怀疑从网页上复制下来的带有看不见的字符,造成不能正常运行的后果。谢谢大师!
作者: wmee    时间: 2010-1-8 22:26
进来认真学习了!!!!!
作者: chenall    时间: 2010-1-9 00:43
@h99h99
谢谢反馈。。

对不起,是我的错,没有经过测试,写错了符号,已经在原贴(第三版)更新。
作者: h99h99    时间: 2010-1-9 13:15
标题: 测试反馈
C 大:谢谢你百满忙之中的答复!经在测试还有问题哦,停在一个DOS 窗口不动了!
作者: hxj    时间: 2010-1-9 13:34
初步测试反馈

用U+  USB-ZIP制作成U盘(KingStone 2G)启动,速度大约1分钟,但桌面图标不能正常显示,启动U盘盘符不显示,程序无法运行,关机死机。


不好意思,发错地方了,因当是发到

小巧精干的WINPE3.0

[ 本帖最后由 hxj 于 2010-1-9 13:38 编辑 ]
作者: chenall    时间: 2010-1-9 19:06
@h99h99
OK,再改一下。
改成了使用PECMD调用了,使用START调用批处理后面要有EXIT。
作者: h99h99    时间: 2010-1-9 21:02
标题: 测试反馈
C 大:测试了,可以了,完美了,谢谢了,再见了!
作者: ixxxxyou    时间: 2010-1-10 13:16
请问现在在一楼的PETOOLS配置文件是最新的吗???

以经是修改好了的吗?
作者: joker0101    时间: 2010-1-11 21:16
呵呵 看不懂 但还是要顶起啊
作者: haiou327    时间: 2010-2-28 00:43
大方便了程序外置

chenall在CODE说明里改过来吧


PECMD FORX @\PETOOLS,TOOLS,0,EXEC !cmd /c "PETOOLS_LINK %TOOLS%"





[ 本帖最后由 haiou327 于 2010-2-28 13:51 编辑 ]
作者: huangxin870302    时间: 2010-2-28 17:29
楼主真是高手,是应该多向楼主好好学习一下!
作者: liaoxin    时间: 2010-3-3 19:29
收下了,感谢楼主的分享!
作者: chenall    时间: 2010-3-3 23:13
原帖由 haiou327 于 2010-2-28 00:43 发表
大方便了程序外置

chenall在CODE说明里改过来吧


PECMD FORX @\PETOOLS,TOOLS,0,EXEC !cmd /c "PETOOLS_LINK %TOOLS%"

82904



不加cmd /c好像也可以的吧,忘了。呵呵。
作者: h99h99    时间: 2010-3-18 20:23
原帖由 chenall 于 2009-12-21 22:34 发表
用的是批处理配合PECMD的LINK功能。
大家可以试一下:
规则
1.有找到REG文件就先执行注册该文件。
2.有找到PECMD.INI就不进行创建快捷方式,而是直接调用PECMD.INI(用于自定义),并且不再找下一级目录。(新 ...


请问楼主:如果我想将 petools 目录 改为 mytools ,需要改哪些地方?谢谢!!
作者: haiou327    时间: 2010-3-19 01:50
标题: 回复 #62 h99h99 的帖子
你是要鱼还是要渔?

[ 本帖最后由 haiou327 于 2010-3-19 01:55 编辑 ]

PETOOLS.JPG (55.41 KB, 下载次数: 368)

PETOOLS.JPG

作者: h99h99    时间: 2010-3-19 06:53
原帖由 haiou327 于 2010-3-19 01:50 发表
你是要鱼还是要渔?

谢谢版主!!
作者: h99h99    时间: 2010-3-19 11:10
原帖由 haiou327 于 2010-3-19 01:50 发表
你是要鱼还是要渔?

版主:还想要条鱼,就是仅搜 x盘的petools ,该改哪里?
作者: haiou327    时间: 2010-3-19 14:08
会渔才行,鱼始终会吃完......

PECMD FORX @X:\MYTOOLS,TOOLS,0,EXEC !cmd /c "PETOOLS_LINK %TOOLS%"

[ 本帖最后由 haiou327 于 2010-3-19 14:41 编辑 ]

PETOOLS.JPG (107.95 KB, 下载次数: 192)

PETOOLS.JPG

作者: h99h99    时间: 2010-3-19 14:56
原帖由 haiou327 于 2010-3-19 14:08 发表
会渔才行,鱼始终会吃完......

PECMD FORX @X:\MYTOOLS,TOOLS,0,EXEC !cmd /c "PETOOLS_LINK %TOOLS%"

谢谢指点!
作者: ziyun    时间: 2010-3-19 18:08
支持一下,谢谢楼主分享!
作者: wama    时间: 2010-3-31 09:35
支持,試試備用,謝謝分享。
作者: kendling    时间: 2010-3-31 13:01
突然发现如果文件名有“()”等特殊符号会有问题,特修改了一下。(红色字)
还有增加了复制desktop.ini的功能。(蓝色字)
  1. ::http://bbs.wuyou.net/forum.php?mod=viewthread&tid=158014&page=1&extra=
  2. ::chenall发表于 2009-12-21 22:34
  3. ::modified by Kend 2010-03-30 QQ:288435
  4. ::发一个重新写的petools搜索配置

  5. ::用的是批处理配合PECMD的LINK功能。
  6. ::大家可以试一下:
  7. ::规则
  8. ::1.有找到REG文件就先执行注册该文件。
  9. ::2.有找到PECMD.INI就不进行创建快捷方式,而是直接调用PECMD.INI(用于自定义),并且不再找下一级目录。(新版不支持这个)
  10. ::3.有找到SETUP.BAT,setup.inf,setup.cmd,自动执行安装
  11. ::4.搜到*.exe,*.wim,*.bat,*.cmd,并且不是SETUP.*的就创建快捷方式。
  12. ::5.单个快捷方式合并(比如\其它工具\WINHEX\目录下只有一个WINHEX程序,则会把快捷方式创建在<其它工具>目录下).

  13. ::petools扩展目录搜索安装程序 by chenall [url=http://www.chenall.comhttp://www.chenall.com[/color[/url]]
  14. ::思路来源:[url=http://bbs.wuyou.net/forum.php?mod=viewthread&tid=140951http://bbs.wuyou.net/forum.php?mod=viewthread&tid=140951[/color[/url]]
  15. ::调用方式
  16. ::PETOOLS_LNK [PETOOLS目录]
  17. ::PECMD调用例子,查找所有petools目录。
  18. ::PECMD FORX @\PETOOLS,TOOLS,0,!EXEC PETOOLS_LINK %TOOLS%
  19. ::2009-12-22 第三版,2009-12-23,修改了执行SETUP.BAT/CMD的调用方式为START /W,解决碰到EXIT退出的问题.
  20. ::2009-12-23,对于注册表文件只自动注册setup_reg.reg,其它的可以由setup.cmd来调用.以免重复执行
  21. ::具体无忧专贴:http://bbs.wuyou.net/forum.php?mod=viewthread&tid=158014

  22. @echo off
  23. if "%~1"=="" goto :eof
  24. if not defined StartMenu goto :eof
  25. if "%~1"=="merge" goto :merge
  26. if not exist "%~1" goto :eof
  27. SET "BASE_DIR=%~1"
  28. SET "外置程序=%LNG_PETOOLS1%%~d1%LNG_PETOOLS2%"
  29. SET "外置程序=%StartMenu%\%外置程序::=%"
  30. SET "_TF=%WinDir%\T_PETOOLS_%base_dir:~0,1%_"
  31. IF EXIST "%外置程序%" RD /S /Q "%外置程序%" 2>nul

  32. :START
  33.   DEL "%_TF%*.*" 2>nul
  34.   PUSHD "%~F1"
  35.   >%_TF%LST.lst dir /s/a/b *.wim *.cmd *.bat *.exe readme*.txt 使用说明*.txt desktop.ini
  36.   POPD
  37.   PUSHD "%WinDir%"
  38.   for /f "usebackq delims=" %%i in (%_TF%LST.lst) do CALL :MAKE_LINK "%%i"
  39.   ECHO.EXEC !%~F0 merge "%外置程序%" >>%_TF%LNK.INI
  40.   ECHO.FILE %_TF%LNK.INI>>%_TF%LNK.INI
  41.   START PECMD LOAD %_TF%LNK.INI
  42.   PUSHD "%~F1"
  43.   >"%_TF%REG.lst" dir /s/a/b SETUP_REG.REG 2>nul
  44.   >"%_TF%INF.lst" dir /s/a/b setup.inf 2>nul
  45.   POPD
  46.   if exist "%_TF%REG.LST" for /f "usebackq delims=" %%i in ("%_TF%REG.LST") do REGEDIT /S "%%i"
  47.   if exist "%_TF%INF.lst" for /f "usebackq delims=" %%i in ("%_TF%INF.lst") do RUNDLL32.EXE SETUPAPI.DLL,InstallHinfSection DefaultInstall 128 %%i
  48.   if exist "%_TF%SETUP.LST" for /f "usebackq delims=" %%i in ("%_TF%SETUP.LST") do CALL :PETOOLS_SETUP %%i
  49.   DEL %_TF%*.lst
  50.   POPD
  51. goto :eof

  52. :MAKE_LINK
  53.   SETLOCAL
  54.   if "%~1"=="" goto :eof
  55.   ::如果有包含AutoRuns就跳过.
  56.   echo.%1|find /i "\AutoRuns" &&goto :eof
  57.   if /i "%~n1"=="setup" (
  58.     echo.%1 >>"%_TF%SETUP.LST"
  59.     goto :eof
  60.   )
  61.   SET ".=%~1"
  62.   SET ".=%.:&=^&%"
  63.   :: Kend 增加
  64.   SET ".=%.:^=^^%"
  65.   SET ".=%.:(=^(%"
  66.   SET ".=%.:)=^)%"
  67.   SET ".=%.:[=^[%"
  68.   SET ".=%.:]=^]%"
  69.   SET ".=%.:{=^{%"
  70.   SET ".=%.:}=^}%"
  71.   SET ".=%.:;=^;%"
  72.   SET ".=%.:'=^'%"
  73.   SET ".=%.:+=^+%"
  74.   SET ".=%.:,=^,%"
  75.   SET ".=%.:`=^`%"
  76.   :: Kend 增加
  77.   SET "PETOOLS=%~dpn1"
  78.   call,SET "PETOOLS=%%PETOOLS:%BASE_DIR%=%外置程序%%%"
  79.   SET "PETOOLS=%PETOOLS:&=^&%"
  80.   :: Kend 增加
  81.   SET "PETOOLS=%PETOOLS:^=^^%"
  82.   SET "PETOOLS=%PETOOLS:(=^(%"
  83.   SET "PETOOLS=%PETOOLS:)=^)%"
  84.   SET "PETOOLS=%PETOOLS:[=^[%"
  85.   SET "PETOOLS=%PETOOLS:]=^]%"
  86.   SET "PETOOLS=%PETOOLS:{=^{%"
  87.   SET "PETOOLS=%PETOOLS:}=^}%"
  88.   SET "PETOOLS=%PETOOLS:;=^;%"
  89.   SET "PETOOLS=%PETOOLS:'=^'%"
  90.   SET "PETOOLS=%PETOOLS:+=^+%"
  91.   SET "PETOOLS=%PETOOLS:,=^,%"
  92.   SET "PETOOLS=%PETOOLS:`=^`%"
  93.   :: Kend 增加
  94.   if /i "%~nx1" == "desktop.ini" (
  95.     echo.FILE %.%=^>%PETOOLS%.ini>>%_TF%LNK.INI
  96.     echo.SITE %PETOOLS%.ini,+H+S>>%_TF%LNK.INI
  97.   ) else (
  98.     echo.LINK %PETOOLS%,%.%>>%_TF%LNK.INI
  99.   )
  100. GOTO :EOF

  101. :PETOOLS_SETUP
  102.   ::为什么需要这些步骤呢,因为考虑到有一些批处理对执行目录的要求(编写时没有考虑到),所以才需要进入批处理目录执行.否则可能会出错.表面上是执行了,其实执行的结果是错误的.用PECMD调用同样会有这样的问题.
  103.   PUSHD "%~dp1"
  104.   PECMD EXEC !%~nx1
  105.   POPD
  106. goto :eof

  107. :merge
  108.   PUSHD %2||GOTO :EOF
  109.   for /d %%i in ("%~2\*") do call :merge_lnk "%%i"
  110.   POPD
  111. goto :eof

  112. :merge_lnk
  113.   CD /D %1||GOTO :EOF
  114.   for /d %%i in ("%~f1\*") do call %0 "%%i"
  115.   CD /D %1||GOTO :EOF
  116.   set n=
  117.   for /f %%i in ('dir /a/b') do (
  118.     if defined n goto :eof
  119.     set n=1
  120.   )
  121.   for /f "usebackq delims=" %%i in (`dir /a/b`) do move /y "%%i" ..\
  122.   cd ..&&rd %1
  123. goto :eof
复制代码

作者: kendling    时间: 2010-3-31 13:40
最新修改:
支持desktop.ini文件,前一版本只复制,无法按desktop.ini显示。问题是desktop.ini所在目录没有设为只读。
--------------------------------------------------------------------------------------
::http://bbs.wuyou.net/forum.php?mod=viewthread&tid=158014&page=1&extra=
::chenall发表于 2009-12-21 22:34
::modified by Kend 2010-03-30 QQ:288435
::发一个重新写的petools搜索配置

::用的是批处理配合PECMD的LINK功能。
::大家可以试一下:
::规则
::1.有找到REG文件就先执行注册该文件。
::2.有找到PECMD.INI就不进行创建快捷方式,而是直接调用PECMD.INI(用于自定义),并且不再找下一级目录。(新版不支持这个)
::3.有找到SETUP.BAT,setup.inf,setup.cmd,自动执行安装
::4.搜到*.exe,*.wim,*.bat,*.cmd,并且不是SETUP.*的就创建快捷方式。
::5.单个快捷方式合并(比如\其它工具\WINHEX\目录下只有一个WINHEX程序,则会把快捷方式创建在<其它工具>目录下).

::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 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 "外置程序=%LNG_PETOOLS1%%~d1%LNG_PETOOLS2%"
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 desktop.ini
  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
  ::如果有包含AutoRuns就跳过.
  echo.%1|find /i "\AutoRuns\" &&goto :eof
  if /i "%~n1"=="setup" (
    echo.%1 >>"%_TF%SETUP.LST"
    goto :eof
  )
  SET ".=%~1"
  SET ".=%.:&=^&%"
  :: Kend 增加
  SET ".=%.:^=^^%"
  SET ".=%.:(=^(%"
  SET ".=%.:)=^)%"
  SET ".=%.:[=^[%"
  SET ".=%.:]=^]%"
  SET ".=%.:{=^{%"
  SET ".=%.:}=^}%"
  SET ".=%.:;=^;%"
  SET ".=%.:'=^'%"
  SET ".=%.:+=^+%"
  SET ".=%.:,=^,%"
  SET ".=%.:`=^`%"
  :: Kend 增加

  SET "PETOOLS=%~dpn1"
  call,SET "PETOOLS=%%PETOOLS:%BASE_DIR%=%外置程序%%%"
  SET "PETOOLS=%PETOOLS:&=^&%"
  :: Kend 增加
  SET "PETOOLS=%PETOOLS:^=^^%"
  SET "PETOOLS=%PETOOLS:(=^(%"
  SET "PETOOLS=%PETOOLS:)=^)%"
  SET "PETOOLS=%PETOOLS:[=^[%"
  SET "PETOOLS=%PETOOLS:]=^]%"
  SET "PETOOLS=%PETOOLS:{=^{%"
  SET "PETOOLS=%PETOOLS:}=^}%"
  SET "PETOOLS=%PETOOLS:;=^;%"
  SET "PETOOLS=%PETOOLS:'=^'%"
  SET "PETOOLS=%PETOOLS:+=^+%"
  SET "PETOOLS=%PETOOLS:,=^,%"
  SET "PETOOLS=%PETOOLS:`=^`%"
  :: Kend 增加

  if /i "%~nx1" == "desktop.ini" (
    echo.FILE %.%=^>%PETOOLS%.ini>>%_TF%LNK.INI
    echo.SITE %PETOOLS%.ini,+R+H+S>>%_TF%LNK.INI
  ) else (
    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"
    attrib +r "%%i" 2>nul
  )

  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
--------------------------------------------------------------------------------------
作者: 呆水瓶    时间: 2010-3-31 13:46
的确很方便 实用啊!
作者: wama    时间: 2010-4-6 10:42
要試試看,是否比以往的好。
作者: wama    时间: 2010-4-6 14:05
試了,有些問題如下:

1、一開始,便執行有setup檔的PETOOLS目錄,但該目錄沒有出現在PETOOLS目錄,
   想請教若PETOOLS目錄內,有不同的setup檔,它怎樣執行呢?
2、PETOOLS目錄內,不是所有的目錄都能找到,如上1、的例子,目錄是沒有出現,
   但奇怪它會執行了setup檔呢?

請高手指教。
作者: haiou327    时间: 2010-4-6 15:18
标题: 回复 #74 wama 的帖子
如果子目录只含一个单独程序,只把该快捷方式建立到上一层。如下例IWNHEX快捷方式只出现在其它工具里,WINHEX目录不出现
  1. 单个快捷方式合并(比如\其它工具\WINHEX\目录下只有一个WINHEX程序,则会把快捷方式创建在<其它工具>目录下).
复制代码
SETUP_REG.REG  将静默导入
setup.inf文件  RUNDLL32.EXE SETUPAPI.DLL,InstallHinfSection DefaultInstall 128 setup.inf

[ 本帖最后由 haiou327 于 2010-4-7 14:05 编辑 ]
作者: wama    时间: 2010-4-7 11:05
回复 #75 haiou327 的帖子

我看並不是這樣,如1、問題,含setup的子目錄內,不只有一个setup程序的,但整個目錄不見出現在PETOOLS目錄內,但在進入PE後即會啟動該程序,我將以下此句抽出,便沒有啟動了。
"if exist "%_TF%SETUP.LST" for /f "usebackq delims=" %%i in ("%_TF%SETUP.LST") do
CALL :PETOOLS_SETUP %%i"
我是用#71樓的最新修改的。
另我試了樓主的第三版,當進入PE前,便出現藍畫面死機了,試多次也一樣。
作者: haiou327    时间: 2010-4-7 12:59
"if exist "%_TF%SETUP.LST" for /f "usebackq delims=" %%i in ("%_TF%SETUP.LST") do
CALL :PETOOLS_SETUP %%i"
调用
PECMD EXEC !%~nx1
去掉这句就不会在加载PETOOL_link时直接执行EXEC !%~nx1,SETUP.wim SETUP.cmd SETUP.bat SETUP.exe只会创建*.wim *.cmd *.bat *.exe readme*.txt 使用说明*.txt快捷方式到%外置程序_%~d1盘目录,加载PETOOL蓝屏死机,说说加载的方法,如果方法正确的话,可以试试只在PETOOL里存放最少文件保留一个EXE文件看能否成功,兰屏死机看看PETooL里是否有setup_reg.reg,setup.inf,*.wim *.cmd *.bat *.exe档为SETUP,有可能是在运行这些文件时出的问题,先试试揪出这些文件来看是否成功。
PETOOL_Link是经多人测试,如果存在加载蓝屏死机早就开锅了

你也可以在加载不成功的话屏掉这两句再加载




这里是我用Chenall的PETOOL_link的一个效果截图,没有出现过你所说过问题


[ 本帖最后由 haiou327 于 2010-4-7 14:45 编辑 ]
作者: wama    时间: 2010-4-7 14:06
謝謝haiou327 大的指點
我是用樓主的第三版加載的,與用#71 kendling 的最新修改版同樣加載,但第三版藍屏死機,
而修改版可正常啟動,只出現#74樓的情況吧!
可否發個Chenall的PETOOL_link及安裝說明給我學習、學習。
作者: haiou327    时间: 2010-4-7 14:33
如果在PECMD.ini加载
在LINK段增加
FORX @\PETOOLS,TOOLS,0,!EXEC PETOOLS_LINK.CMD %TOOLS%

也可以调用CMD方式加载,内容如下
PECMD FORX @\PETOOLS,TOOLS,0,!EXEC PETOOLS_LINK.CMD %TOOLS%
在PECMD配制文件里创建cmd文件的快捷方式到指定开始菜单里

例程可以下载有加载PETOOL_LINK的PE解开PECMD.ini查看
这里有一个#463楼下载附件参考里面的PEcmd.INI,用的是CHENall第三版

  http://bbs.wuyou.net/forum.php?mod=viewthread&tid=160583&page=47#pid1910474
作者: wama    时间: 2010-4-8 18:42
感谢haiou327 大的指引,你推荐的#463楼的附件已下载测试,我依照那方法及用你的调用CMD方式加载,或附件内的方式加载都不成功,不是沒有反应,便是蓝屏死机,看来不大好用。
到现在为止,还是感觉 PETOOLS.INI 易用及稳定,唯一缺点是所有PETOOLS目录下的文件,都全部显现出来,可有高手能编辑一下PETOOLS.INI内容,使能只显示 *.wim *.cmd *.bat *.exe
*.txt 等文件,这真是太好了。

再次感谢haiou327 大的帮忙与热心! PETOOLS.zip (589 Bytes, 下载次数: 172)
作者: wilpharma    时间: 2010-4-8 19:58
支持 又学习了一样东西 O(∩_∩)O~
作者: guanjinman    时间: 2010-4-14 15:26
使用第三版

搜索前:

PETOOLS
    ┃
    ┣━PXE服务器
    ┃
    ┣━镜像工具
    ┃
    ┣━硬件检测
    ┃
    ┣━备用驱动
    ┃   
    ┃     DriversVM显声网驱动.CAB
    ┃     别说缺驱动.txt
    ┃     万能显卡驱动.7z
    ┃     万能显卡驱动.CMD
    ┃
    ┣━网络工具
    ┃


搜索后:

外置程序_H盘
    ┃
    ┣━PXE服务器
    ┃
    ┣━镜像工具
    ┃
    ┣━硬件检测
    ┃
    ┣━万能显卡驱动.CMD
    ┃
    ┣━网络工具
    ┃   

搜索后,【备用驱动】文件夹没了,里面的万能显卡驱动.CMD提到外置程序_H盘下面
作者: ziyun    时间: 2010-4-14 17:40
又一个精品。谢谢楼主,太谢谢了,
作者: shan    时间: 2010-12-19 11:07
收藏学习了,真是好文章
作者: 2011Franz    时间: 2011-6-2 16:51
請問,Noname XPE 是否能以此應用,搜索其Outtools的外置程序,為將其完全藏入UD中?
可否詳細說明一下如何配置...
作者: anxi_dongri    时间: 2011-8-2 15:01
请教为什么我将别人做好的petools.ini搬过来时无法完全显示列表,只显示1盘PETOOLS-Target,后面就没在显示了。
如果点这个target,倒是跳到对应的目录。
作者: sunsea    时间: 2011-12-4 16:34
那请问考虑到这种情况没:某软件用。REG文件(或INF)记录注册数据,然后有没有别的REG文件,然后你用REG注册,就会报错,影响执行效率,起码一个错误在那影响雅观吧?因此建议增加检查REG有效性,就是读REG文件开头是否有Windows Registry Editor Version 5.00或REGEDIT4这一行(INF文件读开头是否有[Verison]这一行),没有就跳过
作者: sunsea    时间: 2012-2-21 20:01
原帖由 chenall 于 2009-12-22 20:10 发表
OK,解决了,顺便处理一下快捷方式合并.如果没有问题就这样子了.

可不可以把readme.txt之流加上?
作者: mdyblog    时间: 2012-3-3 03:11
原帖由 hhh333 于 2009-12-22 13:53 发表
chenall真是编程高手,以前总想去递规调用,而兄弟就是一个dir /s就搞定了,很巧,逻辑也很清晰。怪不得现在不点将g4d也交到你手上了。

有个建议,由于有的PE会将TEMP改变到硬盘或其他盘上,在这上面读写效率 ...


PECMD-32.2012.1除夕版.多窗口多线-U65F裸机系统+18M酷MiniPE
http://bbs.wuyou.net/forum.php?mod=viewthread&tid=205402&extra=page%3D1

直接在内存中生成,不需要中间临时文件。
PETOOLS_LINK.WCS:
#!PECMD
// VER >= PECMD2012.1.U65F
SET &&EnviMode=1  //避免意外错误,空变量,外部变量,
SET FORCELOCAL=1  //可以处理大变量. 不影响外部变量
///////LOGS *D:\xx.log //调试记录

CALL PETOOLS_LINK %*
//主函数: PETOOLS_LINK
//参数: 搜索处理的目录
//     可以是相对目录, .. . 构成的目录
_SUB PETOOLS_LINK
    FIND  $=%StartMenu%, EXIT _SUB
    FIND  $=%~1, EXIT _SUB
    SET &SETUP=   //初始化空表
    TEAM SET &SETUP=| SET &LST=| SET &REG=|  SET &INF=| SET &BLEN=0|  SET &BASE_DIR=
    SET$ &NL=0d 0a //换行
   
   
    FDIR --full BASE_DIR=%1\    //换成绝对,干净的路径
   
    STRL BLEN=%BASE_DIR%
    CALC BLEN=%BLEN% + 2  // 1:\  1:下一位置
    LSTR DRV=1,%BASE_DIR%  //D
    SET 外置程序=%StartMenu%\外置程序_%DRV%盘
   
    FILE  %外置程序%
   
    EXEC* --wd:"%~1" LST=!cmd /c dir /s/a/b *.wim *.cmd *.bat *.exe *.wcs *.wcz  readme*.txt 使用说明*.txt
    TEAM SET I=1| READ -,-1,NUM,%LST%
    LOOP #%I%<=%NUM%,
    {
        READ -,%I%,LINE,%LST%
        CALC  I=%I% + 1
        CALL  MAKE_LINK "%LINE%"  //带有目录
    }

    CALL  merge "%外置程序%"
    EXEC* --wd:"%~1" REG=!cmd /c dir /s/a/b SETUP_REG.REG 2>nul
    TEAM SET I=1| READ -,-1,NUM,%REG%
    LOOP #%I%<=%NUM%,
    {
        READ -,%I%,LINE,%REG%
        CALC  I=%I% + 1
        EXEC =REGEDIT /S %LINE%   //带有目录
    }
    EXEC* --wd:"%~1" INF=!cmd /c dir /s/a/b setup.inf 2>nul
    TEAM SET I=1| READ -,-1,NUM,%INF%
    LOOP #%I%<=%NUM%,
    {
        TEAM READ -,%I%,LINE,%INF%| CALC  I=%I% + 1
        EXEC =RUNDLL32.EXE SETUPAPI.DLL,InstallHinfSection DefaultInstall 128 %LINE%  //带有目录
        //DEVI %LINE%  //直接用DEVI
    }
   
    TEAM SET I=1| READ -,-1,NUM,%SETUP%
    LOOP #%I%<=%NUM%,
    {
        TEAM READ -,%I%,LINE,%SETUP%| CALC  I=%I% + 1
        EXEC --wd:*"%LINE%"   !%LINE%
    }
_END//END_OF_PETOOLS_LINK


_SUB MAKE_LINK
    FIND $=%~1, EXIT _SUB
    TEAM SET &&MN=|  SET &&PT=
    NAME MN=%~1
    FIND $=%MN%, EXIT _SUB
    FIND $setup=%MN%,
    {
        SET SETUP=%SETUP%%NL%%1  //加入SETUP表
        EXIT _SUB
    }
    FDIR DIR1=%~1
    MSTR PT=%BLEN%,-1,%DIR1%  //砍掉起始目录BASE_DIR\
    ECHO MN=[%PT%] [%PT%\%MN%]
    LINK %外置程序%\%PT%\%MN%,%~1
_END // END_OF_MAKE_LINK

//:PETOOLS_SETUP //这个版本PECMD 可以 --wd:dir 解决

// merge: 对每个子目录, CALL  merge_lnk
_SUB merge
    SET &I=   //
    FORX  @%~1\*.*,I, CALL  merge_lnk  "%I%"
_END // END_OF_merge



// merge_lnk: 一个或空目录,合并到上级目录
_SUB merge_lnk
    TEAM SET &I=   //
    FORX @%~1\*.*,I, CALL  merge_lnk  "%I%"  //递归调用,深度优先。
    TEAM SET &MN=| SET &n=0| SET &MSG=| SET &NUM=| SET &FILE=| SET &DIR=%~1| SET &LINE=
    FORX %~1\*.*,I,
    {
        NAME MN=%I%   
        IFEX ..\%MN%, SET n=9| CALC n=%n% + 1   //上级有重名则不移动
    }
    FIND $%n%>1,! // EXIT _SUB   //多个文件
    {
        EXEC* MSG=!cmd.exe  /C  dir /a/b %~1\*.*    //没有目录名;
        READ -,-1,NUM,%MSG%
        LOOP #%I%<=%NUM%,
        {
            TEAM READ -,%I%,LINE,%MSG%| CALC  I=%I% + 1
            IFEX %DIR%\%LINE%,! FILE  %FILE%->%DIR%\..   //移动到上级
        }
        EXEC* MSG=!cmd.exe  /C  dir /a/b %~1\*.*   //没有目录名;
        READ -,-1,NUM,%MSG%
        IFEX $%NUM%<1, FILE %~1 //删除空目录
    }
_END  //END_OF_merge_lnk

_ENDFILE  //_ENDFILE 后面部分根本不调入内存,就像不存在
EXIT FILE

//<2>PETOOLS.WCS: DSystem mdyblog.blog.163.com
//调用方式
//PETOOLS_LNK [PETOOLS目录]
//PECMD调用例子,查找所有petools目录。
//FORX @\PETOOLS,TOOLS,0,PECMD LOAD PETOOLS_LINK.WCS  "%TOOLS%” //外部脚本
//FORX @\PETOOLS,TOOLS,0,CALL PETOOLS_LINK  "%TOOLS%"            //嵌入函数 ,直接调函数

//<1>PETOOLS.CMD: chenall
::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






作者: mdyblog    时间: 2012-3-3 10:51
原帖由 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 ...

简化了一下:


PECMD-32.2012.1除夕版.多窗口多线-U65F裸机系统+18M酷MiniPE
http://bbs.wuyou.net/forum.php?mod=viewthread&tid=205402&extra=page%3D1

直接在内存中生成,不需要中间临时文件。
PETOOLS_LINK.WCS:


#!PECMD
// VER >= PECMD2012.1.U65F
SET &&EnviMode=1  //避免意外错误,空变量,外部变量,
SET FORCELOCAL=1  //可以处理大变量. 不影响外部变量
///////LOGS *D:\xx.log //调试记录

CALL PETOOLS_LINK %*

//主函数: PETOOLS_LINK
//参数: 搜索处理的目录
//     可以是相对目录, .. . 构成的目录
_SUB PETOOLS_LINK
    FIND  $=%StartMenu%, EXIT _SUB
    FIND  $=%~1, EXIT _SUB
    SET &SETUP=   //初始化空表
    TEAM SET &SETUP=| SET &LST=| SET ®=|  SET &INF=| SET &BLEN=0|  SET &BASE_DIR=
    SET$ &NL=0a  //换行
   
   
    FDIR --full BASE_DIR=%1\    //换成绝对,干净的路径
   
    STRL BLEN=%BASE_DIR%
    CALC BLEN=%BLEN% + 2  // 1:\  1:下一位置
    LSTR DRV=1,%BASE_DIR%  //D
    SET 外置程序=%StartMenu%\外置程序_%DRV%盘
   
    FILE  %外置程序%
   
    EXEC* --wd:"%~1" LST=!cmd /c dir /s/a/b *.wim *.cmd *.bat *.exe *.wcs *.wcz  readme*.txt 使用说明*.txt
    FORX *NL LST,LINE, CALL  MAKE_LINK "%LINE%"  //带有目录

    CALL  merge "%外置程序%"

    EXEC* --wd:"%~1" REG=!cmd /c dir /s/a/b SETUP_REG.REG 2>nul
    FORX *NL REG,LINE, EXEC REGEDIT /S %LINE%   //带有目录
    EXEC* --wd:"%~1" INF=!cmd /c dir /s/a/b setup.inf 2>nul
    FORX *NL INF,LINE, EXEC =RUNDLL32.EXE SETUPAPI.DLL,InstallHinfSection DefaultInstall 128 %LINE%  //带有目录
        //DEVI %LINE%  //直接用DEVI
   
    FORX *NL SETUP,LINE, EXEC --wd:*"%LINE%"   !%LINE%
_END//END_OF_PETOOLS_LINK


_SUB MAKE_LINK
    FIND $=%~1, EXIT _SUB
    TEAM SET &&MN=|  SET &&PT=
    NAME MN=%~1
    FIND $=%MN%, EXIT _SUB
    FIND $setup=%MN%, TEAM  SET SETUP=%SETUP%%NL%%1 | EXIT _SUB //加入SETUP表
    FDIR DIR1=%~1
    MSTR PT=%BLEN%,-1,%DIR1%  //砍掉起始目录BASE_DIR\
    ECHO MN=[%PT%] [%PT%\%MN%]
    LINK %外置程序%\%PT%\%MN%,%~1
_END // END_OF_MAKE_LINK

//:PETOOLS_SETUP //这个版本PECMD 可以 --wd:dir 解决


// merge: 对每个子目录, CALL  merge_lnk
_SUB merge
    SET &I=   //
    FORX  @%~1\*.*,I, CALL  merge_lnk  "%I%"
_END // END_OF_merge




// merge_lnk: 一个或空目录,合并到上级目录
_SUB merge_lnk
    TEAM SET &I=   //
    FORX @%~1\*.*,I, CALL  merge_lnk  "%I%"  //递归调用,深度优先。
    TEAM SET &MN=| SET &n=0| SET &MSG=| SET &NUM=| SET &FILE=| SET &DIR=%~1| SET &LINE=
    FORX %~1\*.*,I,
    {
        NAME MN=%I%   
        IFEX ..\%MN%, SET n=9| CALC n=%n% + 1   //上级有重名则不移动
    }
    FIND $%n%>1,! // !多个文件
    {
        EXEC* MSG=!cmd.exe  /C  dir /a/b %~1\*.*    //没有目录名;
        READ -,-1,NUM,%MSG%
        LOOP #%I%<=%NUM%,
        {
            TEAM READ -,%I%,LINE,%MSG%| CALC  I=%I% + 1
            IFEX %DIR%\%LINE%,! FILE  %FILE%->%DIR%\..   //移动到上级
        }
        EXEC* MSG=!cmd.exe  /C  dir /a/b %~1\*.*   //没有目录名;
        READ -,-1,NUM,%MSG%
        IFEX $%NUM%<1, FILE %~1 //删除空目录
    }
_END  //END_OF_merge_lnk

_ENDFILE  //_ENDFILE 后面部分根本不调入内存,就像不存在
EXIT FILE

//<2>PETOOLS.WCS: DSystem mdyblog.blog.163.com
//调用方式
//PETOOLS_LNK [PETOOLS目录]
//PECMD调用例子,查找所有petools目录。
//FORX @\PETOOLS,TOOLS,0,PECMD LOAD PETOOLS_LINK.WCS  "%TOOLS%” //外部脚本
//FORX @\PETOOLS,TOOLS,0,CALL PETOOLS_LINK  "%TOOLS%"            //嵌入函数 ,直接调函数

//<1>PETOOLS.CMD: chenall
::petools扩展目录搜索安装程序 by chenall [url=http://www.chenall.comhttp://www.chenall.com[/color[/url]]
::思路来源:[url=http://bbs.wuyou.net/viewthread.php?tid=140951http://bbs.wuyou.net/viewthread.php?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



[ 本帖最后由 2012abc19701 于 2012-5-5 08:41 编辑 ]
作者: 2010ttt    时间: 2012-4-9 17:06
好东西啊,用绿色软件的ME有福了!
作者: cszwin    时间: 2013-9-16 22:42
太厉害了 佩服啊
作者: papago    时间: 2017-10-8 17:25
感谢chenall ,学习一下外置程序petools
作者: wentianlanon    时间: 2019-9-10 10:31
反馈个问题 :
集成这个包:http://bbs.wuyou.net/forum.php?mod=viewthread&tid=323832
完全加载完成后,结构不完整了。





作者: wwwfufei    时间: 2021-1-11 08:33
支持
作者: zj9018    时间: 2023-3-22 20:48
#在这里快速回复#如果您要查看本帖隐藏内容请回复
作者: liangnijian    时间: 2024-5-10 19:40
谢谢分享
作者: wang1126    时间: 2024-5-11 05:44
谢谢分享
作者: Magic45    时间: 2024-5-14 08:26
高人,顶顶




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