[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
@IF NOT DEFINED DEBUG @ECHO OFF

FOR /F "TOKENS=*" %%A IN (A.TXT) DO (
        SETLOCAL ENABLEDELAYEDEXPANSION
        SET "VAR=%%A"
        SET "VAR=!VAR:他娘的=TND!"
        ECHO !VAR!
        ENDLOCAL
        )
FOR /F "TOKENS=*" %%A IN (A.TXT) DO (
        SETLOCAL ENABLEDELAYEDEXPANSION
        SET "VAR=%%A"
        SET "VAR=!VAR:他娘的=!"
        ECHO !VAR!
        ENDLOCAL
        )
1

评分人数

TOP

除错用,

我有在写很多行等级不高的批处理
有些时候要除错必须要检查到哪一行出问题
所以当有变数debug时就会显示执行的行
这样除错比较快

[ 本帖最后由 sylovanas 于 2008-11-8 11:05 编辑 ]

TOP

  1. @IF NOT DEFINED DEBUG @ECHO OFF
  2. SET "SYSTEM=%SYSTEMROOT%\SYSTEM32"
  3. IF EXIST .\TEMP\* DEL .\TEMP\* /Q >NUL 2>&1
  4. IF EXIST LOG.TXT DEL LOG.TXT /Q >NUL 2>&1
  5. SWREG QUERY "HKLM\SYSTEM\CURRENTCONTROLSET\SERVICES" | SED "/.*SERVICES\\/I!d;s/.*SERVICES\\//I;s/$/\x22/" > .\TEMP\TEMP00
  6. GREP -Fviwf .\DAT\SERVICE.DAT .\TEMP\TEMP00 > .\TEMP\SERVICE01
  7. SED "s/\x22$//" .\TEMP\SERVICE01 > .\TEMP\SERVICE02
  8. ECHO AppMgmt>>.\TEMP\SERVICE02
  9. GREP -q "." .\TEMP\SERVICE02 && FOR /F "TOKENS=*" %%A IN (.\TEMP\SERVICE02) DO CALL :SER_CHK "%%A"
  10. GOTO END
  11. :SER_CHK
  12. IF "%~1"=="" GOTO:EOF
  13. IF NOT DEFINED SYSTEMB SET "SYSTEMB=%SYSTEM:\=\\%"
  14. IF NOT DEFINED SYSTEMROOTB SET "SYSTEMROOTB=%SYSTEMROOT:\=\\%"
  15. IF NOT DEFINED PROGRAMB SET "PROGRAMB=%PROGRAMFILES:\=\\%"
  16. IF ABC
  17. SWREG QUERY "HKLM\SYSTEM\CURRENTCONTROLSET\SERVICES\%~1" | MTEE /+ .\TEMP\DEBUG01 > .\TEMP\SER_CHK01
  18. GREP -Fiq "   imagepath        " .\TEMP\SER_CHK01 || GOTO:EOF
  19. SET "SER0=S9"
  20. SET "SER1=%~1"
  21. SET "SER2=ERR"
  22. FOR /F "TOKENS=*" %%A IN ('SED -r "/^   START\t.*\t/I!d;s///;s/ .*//" .\TEMP\SER_CHK01') DO SET "SER0=S%%A"
  23. FOR /F "TOKENS=*" %%A IN ('SED -r "/^   DISPLAYNAME\t.*\t/I!d;s///" .\TEMP\SER_CHK01') DO SET "SER1=%%A"
  24. SED "/^   imagepath\t.*\t/I!d;s//\t/" .\TEMP\SER_CHK01 > .\TEMP\SER_CHK02
  25. SED "s/\t\\/\t/;s/\t??\\/\t/;s/\tSYSTEMROOT/\t%SYSTEMROOTB%/I;s/\tSYSTEM32/\t%SYSTEMB%/I;s/\t%%SYSTEMROOT%%/\t%SYSTEMROOTB%/I;s/\t%%PROGRAMFILES%%/\t%PROGRAMB%/I" .\TEMP\SER_CHK02 > .\TEMP\SER_CHK03
  26. GREP -iq "%SYSTEMB%\\SVCHOST\.EXE" .\TEMP\SER_CHK03 && CALL :SVC_CHK "%~1"
  27. IF /I "%SER2%"=="ERR" FOR /F "TOKENS=*" %%A IN (.\TEMP\SER_CHK03) DO SET "SER2=%%A  [%%~TZA]"
  28. ECHO %SER0%  %~1;%SER1%;%SER2%>>LOG.TXT
  29. DEL .\TEMP\SER_CHK0? .\TEMP\SVC_CHK0? /F/Q >NUL 2>&1
  30. SET "SER0="
  31. SET "SER1="
  32. SET "SER2="
  33. GOTO:EOF
  34. :SVC_CHK
  35. IF "%~1"=="" GOTO:EOF
  36. SWREG QUERY "HKLM\SYSTEM\CURRENTCONTROLSET\SERVICES\%~1\PARAMETERS" /V "SERVICEDLL" > .\TEMP\SVC_CHK01 2>NUL && (
  37.         SED "/^   SERVICEDLL\t.*\t/I!d;s//\t/" .\TEMP\SVC_CHK01 > .\TEMP\SVC_CHK02
  38.         SED "s/\t\\/\t/;s/\t??\\/\t/;s/\tSYSTEMROOT/\t%SYSTEMROOTB%/I;s/\tSYSTEM32/\t%SYSTEMB%/I;s/\t%%SYSTEMROOT%%/\t%SYSTEMROOTB%/I;s/\t%%PROGRAMFILES%%/\t%PROGRAMB%/I" .\TEMP\SVC_CHK02 > .\TEMP\SVC_CHK03
  39.         FOR /F "TOKENS=*" %%A IN (.\TEMP\SVC_CHK03) DO SET "SER2=%%A  [%%~TZA]"
  40.         DEL .\TEMP\SVC_CHK0? /F/Q >NUL 2>&1
  41.         )
  42. GOTO:EOF
  43. :END
复制代码
上面的到了IF ABC就會強制中斷
如果行數到很多行的時候會很不好找
所以加上DEBUG變數時
顯示出如下
  1. C:\UPX\1>SET "SYSTEM=C:\WINDOWS\SYSTEM32"
  2. C:\UPX\1>IF EXIST .\TEMP\* DEL .\TEMP\* /Q  1>NUL 2>&1
  3. C:\UPX\1>IF EXIST LOG.TXT DEL LOG.TXT /Q  1>NUL 2>&1
  4. C:\UPX\1>SWREG QUERY "HKLM\SYSTEM\CURRENTCONTROLSET\SERVICES"   | SED "/.*SERVIC
  5. ES\\/I!d;s/.*SERVICES\\//I;s/$/\x22/"  1>.\TEMP\TEMP00
  6. C:\UPX\1>GREP -Fviwf .\DAT\SERVICE.DAT .\TEMP\TEMP00  1>.\TEMP\SERVICE01
  7. C:\UPX\1>SED "s/\x22$//" .\TEMP\SERVICE01  1>.\TEMP\SERVICE02
  8. C:\UPX\1>ECHO AppMgmt 1>>.\TEMP\SERVICE02
  9. C:\UPX\1>GREP -q "." .\TEMP\SERVICE02   && FOR /F "TOKENS=*" %A IN (.\TEMP\SERVI
  10. CE02) DO CALL :SER_CHK "%A"
  11. C:\UPX\1>CALL :SER_CHK "1394hub"
  12. C:\UPX\1>IF "1394hub" == "" GOTO:EOF
  13. C:\UPX\1>IF NOT DEFINED SYSTEMB SET "SYSTEMB=C:\\WINDOWS\\SYSTEM32"
  14. C:\UPX\1>IF NOT DEFINED SYSTEMROOTB SET "SYSTEMROOTB=C:\\WINDOWS"
  15. C:\UPX\1>IF NOT DEFINED PROGRAMB SET "PROGRAMB=C:\\Program Files"
  16. 命令語法不正確。
  17. C:\UPX\1>IF ABC
复制代码
這樣找錯誤的行就比較快

[ 本帖最后由 sylovanas 于 2008-11-8 12:46 编辑 ]
3

评分人数

    • wxcute: 好,早看出你不是新手。多谢支持我的帖PB + 10 技术 + 1
    • Batcher: 感谢分享PB + 5
    • batman: 学习了,此法可推广PB + 5

TOP

返回列表