当前位置: 首页 > 教程 > 批处理 >

批处理脚本调试

精华
小牛编辑
112浏览
2023-03-14

通常情况下,运行批处理文件时可能会遇到问题,而且大多数情况下都需要以某种方式调试批处理文件,以确定是批处理文件本身的问题。 以下是一些可以帮助调试批处理脚本文件的技术。

错误消息

要找出消息的来源,请按照下列步骤操作 -

第1步 - 移除REM @ECHO OFF,即REM @ECHO OFF:: @ECHO OFF
第2步 - 使用必要的命令行参数运行批处理文件,将所有输出重定向到日志文件以供以后比较。

test.bat > batch.log 2>&1

第3步 - 在文件batch.log中搜索错误消息

第4步 - 检查上一行是否有任何意外或无效的命令,命令行开关或值; 要特别注意命令中使用的任何环境变量的值。

第5步 - 纠正错误并重复此过程,直到所有错误消息都消失。

复杂的命令行

另一个常见的错误来源是不正确的重定向命令,例如,使用不正确的搜索字符串“嵌套” FINDFINDSTR命令,有时在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