批处理文件测试错误级别

Dan*_*ell 18 error-handling batch-file

我试图在另一个exe成功执行的条件下有条件地从批处理文件中运行exe.

我尝试了几种不同的IF和ERRORLEVEL组合,但似乎都没有效果

"..\..\..\TeamBuildTypes\Current Branch\DatabaseUpdate.exe" -s localhost\sql2008r2 

IF %ERRORLEVEL% 1(
"..\..\..\TeamBuildTypes\Current Branch\DatabaseUpdate.exe" -s localhost\sql2008
)
Pause
Run Code Online (Sandbox Code Playgroud)

给我错误

1(此时出乎意料.

我在哪里错了?

And*_*ers 42

IF ERRORLEVEL ...是自DOS日以来支持的特殊语法,%ERRORLEVEL%在WinNT中添加了变量支持.

原始语法使用如下:

call someapp.exe
if errorlevel 1 goto handleerror1orhigher
echo succuess... 
Run Code Online (Sandbox Code Playgroud)

要使用该变量,请使用常规IF语法: if %errorlevel%==0 echo success...

请注意,%errorlevel%如果有人停止工作,则set errorlevel=foo内部cmd.exe命令可能无法更新.

另一种解决方案是使用&&:

call someapp.exe && (echo success) || (echo error!)
Run Code Online (Sandbox Code Playgroud)

有(至少)两个已知的情况,其中errorlevel被破坏,你必须使用||:

  • 如果errorlevel 0表示"如果errorlevel大于或等于零",即任何值.要求成功的正确方法是:如果不是错误级别1回声成功... (4认同)
  • @Anders:是的,但在这种情况下,整个"if errorlevel 0"部分是不必要的,可能会让新手感到困惑. (3认同)
  • 我只使用过“ &&”或“ ||”,从来没有在一行上使用过它们。不知道它们在一起本质上就像`IF ... ELSE`一样工作。真是一件好事,谢谢! (2认同)

小智 5

否定错误级别可能会产生问题.尝试这样的事情:

IF '%ERRORLEVEL%'=='0' GOTO OK
Run Code Online (Sandbox Code Playgroud)