批處理腳本調試
通常情況下,運行批處理文件時可能會遇到問題,而且大多數情況下都需要以某種方式調試批處理文件,以確定是批處理文件本身的問題。 以下是一些可以幫助調試批處理腳本文件的技術。
錯誤消息
要找出消息的來源,請按照下列步驟操作 -
第1步 - 移除REM [@ECHO](https://github.com/ECHO "@ECHO") OFF
,即REM [@ECHO](https://github.com/ECHO "@ECHO") OFF
或:: [@ECHO](https://github.com/ECHO "@ECHO") OFF
。
第2步 - 使用必要的命令行參數運行批處理文件,將所有輸出重定向到日誌文件以供以後比較。
test.bat > batch.log 2>&1
第3步 - 在文件batch.log
中搜索錯誤消息
第4步 - 檢查上一行是否有任何意外或無效的命令,命令行開關或值; 要特別注意命令中使用的任何環境變量的值。
第5步 - 糾正錯誤並重復此過程,直到所有錯誤消息都消失。
複雜的命令行
另一個常見的錯誤來源是不正確的重定向命令,例如,使用不正確的搜索字符串「嵌套」 FIND
或FINDSTR
命令,有時在FOR / F
循環中。
要檢查這些複雜命令的有效性,請按照下列步驟操作 -
第1步 - 在使用複雜命令集的行之前插入「命令檢查行」。
以下是插入ECHO
命令以標記第一個TYPE
命令的輸出結束和下一個開始的位置的示例。
TYPE %Temp%.\apipaorg.reg
ECHO.================================================ TYPE %Temp%.\apipaorg.reg
| FIND
"[HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\TCPIP\Parameters\Interfaces\"
第2步 - 按照程序查找上述錯誤消息來源。
第3步 - 特別注意「簡化」命令行的輸出:預期格式的輸出是什麼? 「令牌」值或位置是否如預期的那樣?
子程序
生成錯誤消息的子例程在查找錯誤原因時會帶來額外的「挑戰」,因爲它們可能在同一個批處理文件中被多次調用。
爲了找出是什麼導致不正確的調用子程序,請按照下列步驟 -
第1步 - 在腳本的開頭添加並重置一個計數器變量 -
SET Counter=0
第2步 - 每次調用子程序時遞增計數器,在子程序的開始插入以下行 -
SET /A Counter+=1
第3步 - 在計數器遞增之後插入另一行,僅包含SET
命令; 這將列出所有的環境變量及其值。
第4步 - 按照程序查找上述錯誤消息源。
Windows版本
如果打算將批處理文件分發給可能運行或不可運行相同Windows版本的其他計算機,則需要儘可能多的Windows版本測試批處理文件。
以下示例顯示如何檢查各種操作系統版本以檢查相關的Windows版本。
@ECHO OFF
:: Check for Windows NT 4 and later
IF NOT "%OS%"=="Windows_NT" GOTO DontRun
:: Check for Windows NT 4
VER | FIND "Windows NT" >NUL && GOTO DontRun
:: Check for Windows 2000
VER | FIND "Windows 2000" >NUL && GOTO DontRun
:: Place actual code here . . .
:: End of actual code . . .
EXIT
:DontRun
ECHO Sorry, this batch file was written for Windows XP and later versions only