鍍金池/ 教程/ Java/ 批處理腳本調(diào)試
批處理決策結(jié)構(gòu)
批處理數(shù)組
批處理網(wǎng)絡(luò)設(shè)置
批處理教程
批處理文件夾操作
批處理進(jìn)程
批處理腳本調(diào)試
批處理函數(shù)
批處理運(yùn)算符
批處理注釋
批處理腳本日志
批處理語(yǔ)法
批處理設(shè)備
批處理輸入輸出
批處理字符串
批處理簡(jiǎn)介
批處理注冊(cè)表
批處理別名
批處理文件
批處理日期時(shí)間
批處理打印
批處理命令
批處理變量
批處理執(zhí)行環(huán)境

批處理腳本調(diào)試

通常情況下,運(yùn)行批處理文件時(shí)可能會(huì)遇到問(wèn)題,而且大多數(shù)情況下都需要以某種方式調(diào)試批處理文件,以確定是批處理文件本身的問(wèn)題。 以下是一些可以幫助調(diào)試批處理腳本文件的技術(shù)。

錯(cuò)誤消息

要找出消息的來(lái)源,請(qǐng)按照下列步驟操作 -

第1步 - 移除REM @ECHO OFF,即REM @ECHO OFF:: @ECHO OFF。
第2步 - 使用必要的命令行參數(shù)運(yùn)行批處理文件,將所有輸出重定向到日志文件以供以后比較。

test.bat > batch.log 2>&1

第3步 - 在文件batch.log中搜索錯(cuò)誤消息

第4步 - 檢查上一行是否有任何意外或無(wú)效的命令,命令行開(kāi)關(guān)或值; 要特別注意命令中使用的任何環(huán)境變量的值。

第5步 - 糾正錯(cuò)誤并重復(fù)此過(guò)程,直到所有錯(cuò)誤消息都消失。

復(fù)雜的命令行

另一個(gè)常見(jiàn)的錯(cuò)誤來(lái)源是不正確的重定向命令,例如,使用不正確的搜索字符串“嵌套” FINDFINDSTR命令,有時(shí)在FOR / F循環(huán)中。

要檢查這些復(fù)雜命令的有效性,請(qǐng)按照下列步驟操作 -

第1步 - 在使用復(fù)雜命令集的行之前插入“命令檢查行”。

以下是插入ECHO命令以標(biāo)記第一個(gè)TYPE命令的輸出結(jié)束和下一個(gè)開(kāi)始的位置的示例。

TYPE %Temp%.\apipaorg.reg
ECHO.================================================ TYPE %Temp%.\apipaorg.reg 
| FIND 
"[HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\TCPIP\Parameters\Interfaces\"

第2步 - 按照程序查找上述錯(cuò)誤消息來(lái)源。

第3步 - 特別注意“簡(jiǎn)化”命令行的輸出:預(yù)期格式的輸出是什么? “令牌”值或位置是否如預(yù)期的那樣?

子程序

生成錯(cuò)誤消息的子例程在查找錯(cuò)誤原因時(shí)會(huì)帶來(lái)額外的“挑戰(zhàn)”,因?yàn)樗鼈兛赡茉谕粋€(gè)批處理文件中被多次調(diào)用。

為了找出是什么導(dǎo)致不正確的調(diào)用子程序,請(qǐng)按照下列步驟 -

第1步 - 在腳本的開(kāi)頭添加并重置一個(gè)計(jì)數(shù)器變量 -

SET Counter=0

第2步 - 每次調(diào)用子程序時(shí)遞增計(jì)數(shù)器,在子程序的開(kāi)始插入以下行 -

SET /A Counter+=1

第3步 - 在計(jì)數(shù)器遞增之后插入另一行,僅包含SET命令; 這將列出所有的環(huán)境變量及其值。

第4步 - 按照程序查找上述錯(cuò)誤消息源。

Windows版本

如果打算將批處理文件分發(fā)給可能運(yùn)行或不可運(yùn)行相同Windows版本的其他計(jì)算機(jī),則需要盡可能多的Windows版本測(cè)試批處理文件。

以下示例顯示如何檢查各種操作系統(tǒng)版本以檢查相關(guān)的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