批处理文件测试错误级别

时间:2011-07-25 06:32:26

标签: 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

给我错误

  

1(此时出乎意料。

我在哪里错了?

2 个答案:

答案 0 :(得分:42)

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

原始语法的用法如下:

call someapp.exe
if errorlevel 1 goto handleerror1orhigher
echo succuess... 

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

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

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

call someapp.exe && (echo success) || (echo error!)

有(至少)两个已知情况,其中错误级别被破坏,您必须改为使用||

答案 1 :(得分:5)

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

IF '%ERRORLEVEL%'=='0' GOTO OK