我有一个批处理文件,它使用不同的参数一遍又一遍地调用相同的可执行文件。如果其中一个调用返回任何级别的错误代码,如何使其立即终止?
基本上,我想要相当于 MSBuild 的ContinueOnError=false.
ContinueOnError=false
检查errorlevelinif语句,然后 (exit /b仅退出批处理文件,而不是整个 cmd.exe 进程)检查 0 以外的值。
errorlevel
if
exit /b
same-executable-over-and-over.exe /with different "parameters" if %errorlevel% neq 0 exit /b %errorlevel%
如果您希望错误级别的值传播到批处理文件之外
if %errorlevel% neq 0 exit /b %errorlevel%
但如果这是在里面,for那就有点棘手了。你需要更多类似的东西:
for
setlocal enabledelayedexpansion for %%f in (C:\Windows\*) do ( same-executable-over-and-over.exe /with different "parameters" if !errorlevel! neq 0 exit /b !errorlevel! )
编辑: 您必须在每个命令后检查错误。cmd.exe/command.com 批处理中没有全局“on error goto”类型的构造。我还更新了我的代码,尽管我在XP 或 Vista 上的任何批量黑客攻击中从未遇到过负错误级别。
一个小更新,您应该将“if errorlevel 1”的检查更改为以下…
IF %ERRORLEVEL% NEQ 0
这是因为在 XP 上您可以得到负数作为错误。0 = 没有问题,其他都是问题。
请记住 DOS 处理“IF ERRORLEVEL”测试的方式。如果您要检查的数字是该数字或更高,它将返回 true,因此如果您正在寻找特定的错误数字,则需要从 255 开始并向下工作。