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

314*_*926 38 if-statement batch-file

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

start "" javaw -jar %~p0/example.jar
Run Code Online (Sandbox Code Playgroud)

成功或产生错误?

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

Pat*_*cke 60

这可能不起作用start,因为它开始一个新窗口,但回答你的问题:

如果该命令返回错误级别,您可以检查以下方法

按特定错误级别

commandhere
if %errorlevel%==131 echo do something
Run Code Online (Sandbox Code Playgroud)

如果出现任何错误

commandhere || echo what to do if error level ISN'T 0
Run Code Online (Sandbox Code Playgroud)

如果没有错误

commandhere && echo what to do if error level IS 0
Run Code Online (Sandbox Code Playgroud)

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

通过解析完整输出

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

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

通过检查字符串

commandhere | find "Error" || echo There was no error!
commandhere | find "Error" && echo There was an error!
Run Code Online (Sandbox Code Playgroud)

你甚至可以混合在一起(只记得逃脱|^|如果在一个for声明中)

希望这可以帮助.


Joe*_*oey 32

您可以使用

if errorlevel 1 echo Unsuccessful
Run Code Online (Sandbox Code Playgroud)

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

  • 这是正确的答案,因为它比检查`%errorlevel%`更明确,因为[ERRORLEVEL不是%ERRORLEVEL%](https://blogs.msdn.microsoft.com/oldnewthing/20080926-00/?p=20743) . (4认同)

jse*_*ars 10

大多数命令/程序在成功时返回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"
Run Code Online (Sandbox Code Playgroud)


And*_*rew 7

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

cd thisDoesntExist
if %errorlevel% == 0 (
  echo Oh, I guess it does
  echo Huh.
)
Run Code Online (Sandbox Code Playgroud)