【问题标题】:Get error code from within a batch file从批处理文件中获取错误代码
【发布时间】:2011-03-27 23:50:42
【问题描述】:

我有一个运行几个可执行文件的批处理文件,我希望它在成功时退出,但如果退出代码 0 则停止。我该怎么做?

【问题讨论】:

    标签: windows batch-file exit-code


    【解决方案1】:

    听起来您需要“If Errorlevel”命令。假设您的可执行文件在失败时返回非 0 退出代码,您可以执行以下操作:

    myProgram.exe
    if errorlevel 1 goto somethingbad
    echo Success!
    exit
    :somethingbad
    echo Something Bad Happened.
    

    错误级别检查是作为大于或等于检查完成的,因此任何非 0 退出值都会触发跳转。因此,如果您需要检查多个特定的退出值,则应首先检查最高的退出值。

    【讨论】:

    • 另外,从 Windows 2000 开始,有一个名为 %ERRORLEVEL% 的“虚拟”环境变量可以用 ==EQULSS 等进行测试。
    • 哦,为了后代,让它在错误时停止,在 :somethingbad 之后,使用“暂停”命令
    • 你不想在那里使用exit,因为这会杀死shell。使用goto :EOFexit /b 以便只终止批处理文件。
    • @Jim:如果您打算使用它,您应该始终在批处理开始时删除带有set ERRORLEVEL= 的变量,因为伪变量的功能可以通过创建实际变量来隐藏用那个名字。而且由于环境是从父进程传递的......你永远无法确定。
    • 哇!我没有想到这一点。太可怕了。
    【解决方案2】:

    您也可以使用conditional processing symbols 进行简单的成功/失败检查。例如:

    myProgram.exe && echo Done!
    

    仅当 myProgram.exe 返回错误级别 0 时才会打印 Done!

    myProgram.exe || PAUSE
    

    如果 myProgram.exe 返回非零错误级别,将导致批处理文件暂停。

    【讨论】:

    • 我不得不同意这个解决方案似乎好多了
    • 所以你可以这样做:myProgram.exe || exit /b 1 来停止其余的命令?
    • 感谢@rakslice 提供此提示。使我的脚本保持整洁。
    【解决方案3】:

    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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-23
      • 1970-01-01
      • 2015-11-27
      • 2012-12-25
      • 1970-01-01
      • 2010-11-12
      相关资源
      最近更新 更多