小编典典

遇到错误时如何使批处理文件终止?

all

我有一个批处理文件,它使用不同的参数一遍又一遍地调用相同的可执行文件。如果其中一个调用返回任何级别的错误代码,如何使其立即终止?

基本上,我想要相当于 MSBuild 的ContinueOnError=false.


阅读 110

收藏
2022-04-08

共1个答案

小编典典

检查errorlevelinif语句,然后 exit /b仅退出批处理文件,而不是整个 cmd.exe 进程)检查 0 以外的值。


same-executable-over-and-over.exe /with different "parameters"
if %errorlevel% neq 0 exit /b %errorlevel%

如果您希望错误级别的值传播到批处理文件之外

if %errorlevel% neq 0 exit /b %errorlevel%

但如果这是在里面,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 开始并向下工作。

2022-04-08