📜  批处理脚本-调试

📅  最后修改于: 2020-11-22 17:54:20             🧑  作者: Mango


在运行批处理文件时,您经常会遇到问题,通常,您需要以某种方式调试批处理文件来确定批处理文件本身的问题。以下是一些有助于调试批处理脚本文件的技术。

错误讯息

要发现消息的来源,请按照下列步骤操作:

步骤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命令的输出在哪里开始。

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