61

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

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

是成功还是产生了错误?

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

4

5 回答 5

82

这可能不适用于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!

你甚至可以混合在一起(只要记住在语句|中用^|if转义for

希望这可以帮助。

于 2013-02-04T17:33:13.787 回答
50

您可以使用

if errorlevel 1 echo Unsuccessful

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

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

于 2013-02-04T16:57:15.027 回答
16

大多数命令/程序在成功时返回 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"
于 2014-02-10T18:03:54.443 回答
8

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

cd thisDoesntExist
if %errorlevel% == 0 (
  echo Oh, I guess it does
  echo Huh.
)
于 2017-08-16T15:20:11.983 回答
2

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

echo %errorlevel%直接运行之后就可以看到了。

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

于 2013-02-04T17:01:17.000 回答