无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
楼主: chenall
打印 上一主题 下一主题

发一个重新写的petools搜索配置(第三版,修正)

  [复制链接]
1#
发表于 2010-3-31 13:01:20 | 显示全部楼层
突然发现如果文件名有“()”等特殊符号会有问题,特修改了一下。(红色字)
还有增加了复制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
复制代码
回复

使用道具 举报

2#
发表于 2010-3-31 13:40:46 | 显示全部楼层
最新修改:
支持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
--------------------------------------------------------------------------------------
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-6-18 13:31

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表