检查批处理文件中的命令是否成功

时间:2013-02-04 16:55:47

标签: batch-file if-statement

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

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

成功或产生错误?

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

5 个答案:

答案 0 :(得分:57)

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

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

通过解析完整输出

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

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

通过检查字符串

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

你甚至可以混在一起(如果在|陈述中,只记得用^|逃避for

希望这有帮助。

答案 1 :(得分:30)

您可以使用

if errorlevel 1 echo Unsuccessful

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

答案 2 :(得分:9)

大多数命令/程序在成功时返回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"

答案 3 :(得分:2)

善良我很难找到答案......这就是:

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

答案 4 :(得分:1)

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

直接运行后查看

echo %errorlevel%

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