在运行批处理文件时,通常会遇到问题,而且通常需要以某种方式调试批处理文件以确定批处理文件本身的问题.以下是一些有助于调试批处理脚本文件的技术.
错误消息
要发现消息来源,请按照下列步骤操作 :
第1步 : REM退出&#ECHO OFF线,即REM&#ECHO OFF或::@ ECHO OFF.
步骤2 : 使用所需的命令行参数运行批处理文件,将所有输出重定向到日志文件以供以后比较.
test.bat > batch.log 2>&1
第3步 : 在文件batch.log中搜索错误消息
步骤4 : 检查上一行是否有任何意外或无效的命令,命令行开关或值;要特别注意命令中使用的任何环境变量的值.
步骤5 : 更正错误并重复此过程,直到所有错误消息都消失.
复杂命令行
另一个常见的错误来源是错误的重定向命令,如例如"嵌套"FIND或FINDSTR命令,搜索字符串不正确,有时在FOR/F循环内.
要检查这些复杂命令的有效性,请按照以下步骤操作 :
第1步 : 在使用复杂命令集的行之前插入"命令检查行".
下面是一个示例,其中插入ECHO命令以标记第一个TYPE命令的输出结束的位置和下一个开始.
TYPE %Temp%.\apipaorg.regECHO.================================================ 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 laterIF NOT "%OS%"=="Windows_NT" GOTO DontRun:: Check for Windows NT 4VER | FIND "Windows NT" >NUL && GOTO DontRun:: Check for Windows 2000VER | FIND "Windows 2000" >NUL && GOTO DontRun:: Place actual code here . . .:: End of actual code . . .EXIT:DontRunECHO Sorry, this batch file was written for Windows XP and later versions only