【发布时间】:2011-03-27 23:50:42
【问题描述】:
我有一个运行几个可执行文件的批处理文件,我希望它在成功时退出,但如果退出代码 0 则停止。我该怎么做?
【问题讨论】:
标签: windows batch-file exit-code
我有一个运行几个可执行文件的批处理文件,我希望它在成功时退出,但如果退出代码 0 则停止。我该怎么做?
【问题讨论】:
标签: windows batch-file exit-code
听起来您需要“If Errorlevel”命令。假设您的可执行文件在失败时返回非 0 退出代码,您可以执行以下操作:
myProgram.exe
if errorlevel 1 goto somethingbad
echo Success!
exit
:somethingbad
echo Something Bad Happened.
错误级别检查是作为大于或等于检查完成的,因此任何非 0 退出值都会触发跳转。因此,如果您需要检查多个特定的退出值,则应首先检查最高的退出值。
【讨论】:
%ERRORLEVEL% 的“虚拟”环境变量可以用 ==、EQU、LSS 等进行测试。
exit,因为这会杀死shell。使用goto :EOF 或exit /b 以便只终止批处理文件。
set ERRORLEVEL= 的变量,因为伪变量的功能可以通过创建实际变量来隐藏用那个名字。而且由于环境是从父进程传递的......你永远无法确定。
您也可以使用conditional processing symbols 进行简单的成功/失败检查。例如:
myProgram.exe && echo Done!
仅当 myProgram.exe 返回错误级别 0 时才会打印 Done!。
myProgram.exe || PAUSE
如果 myProgram.exe 返回非零错误级别,将导致批处理文件暂停。
【讨论】:
myProgram.exe || exit /b 1 来停止其余的命令?
比Hellion's answer 更好的解决方案是检查%ERRORLEVEL% 环境变量:
IF %ERRORLEVEL% NEQ 0 (
REM do something here to address the error
)
它执行IF 主体,如果返回码不是零,而不仅仅是大于零的值。
命令IF ERRORLEVEL 1 ... 错过了负返回值。一些程序也可能使用负值来表示错误。
顺便说一句,我喜欢 Cheran's answer(使用 && 和 || 运算符),并向所有人推荐。
有关该主题的更多信息,请阅读this article
【讨论】: