【问题标题】:check if command was successful in a batch file检查命令是否在批处理文件中成功
【发布时间】:2013-01-19 10:23:47
【问题描述】:

如何在批处理文件中检查 if 命令

start "" javaw -jar %~p0/example.jar

是成功还是产生了错误?

我想使用 if/else 语句来回显此信息。

【问题讨论】:

    标签: batch-file exit-code errorlevel


    【解决方案1】:

    这可能不适用于start,因为这会打开一个新窗口,但要回答您的问题:

    如果命令返回错误级别可以通过以下方式检查

    按特定错误级别

    commandhere
    if %errorlevel%==131 echo do something
    

    如有错误

    commandhere || echo what to do if error level ISN'T 0
    

    如果没有错误

    commandhere && echo what to do if error level IS 0
    

    如果它没有返回错误级别但确实给出了输出,您可以在变量中捕获它并通过输出来确定,例如(注意标记和分隔符只是示例,可能会因任何特殊字符而失败)

    通过解析完整输出

    for /f "tokens=* delims=" %%a in ('somecommand') do set output=%%a
    if %output%==whateveritwouldsayinerror echo error
    

    或者您可以在输出中查找单个短语,例如单词 Error

    通过检查字符串

    commandhere | find "Error" || echo There was no error!
    commandhere | find "Error" && echo There was an error!
    

    您甚至可以混合在一起(如果在 for 语句中,请记住将 |^| 转义)

    希望这会有所帮助。

    【讨论】:

    • 如何检查不相等?
    • 这应该是公认的答案
    【解决方案2】:

    你可以使用

    if errorlevel 1 echo Unsuccessful
    

    在某些情况下。这取决于最后一个返回正确退出代码的命令。如果你的程序正常返回,即使出现异常情况,你也无法判断有什么问题。

    小心使用像 Robocopy 这样的程序,它需要更细微的方法,因为从中返回的错误级别是一个位掩码,其中包含的不仅仅是布尔信息,实际成功代码是 AFAIK,3。

    【讨论】:

    【解决方案3】:

    大多数命令/程序在成功时返回 0,而其他一些值(称为 errorlevel)表示错误。

    您可以在批处理中检查这一点,例如:

    call <THE_COMMAND_HERE>
    if %ERRORLEVEL% == 0 goto :next
    echo "Errors encountered during execution.  Exited with status: %errorlevel%"
    goto :endofscript
    
    :next
    echo "Doing the next thing"
    
    :endofscript
    echo "Script complete"
    

    【讨论】:

      【解决方案4】:

      天哪,我很难找到答案……这里是:

      cd thisDoesntExist
      if %errorlevel% == 0 (
        echo Oh, I guess it does
        echo Huh.
      )
      

      【讨论】:

        【解决方案5】:

        我不知道 javaw 是否会写入 %errorlevel% 变量,但它可能会。

        echo %errorlevel%之后你直接运行看看。

        除此之外,您可以将 javaw 的输出通过管道传输到文件,然后使用 find 查看结果。在不知道它的输出的情况下,我真的无法帮助你。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-05-28
          • 2013-01-08
          • 2013-07-18
          • 1970-01-01
          • 1970-01-01
          • 2023-03-05
          • 1970-01-01
          • 2022-10-14
          相关资源
          最近更新 更多