Error handling 批处理文件测试错误级别

Error handling 批处理文件测试错误级别,error-handling,batch-file,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

我试图在另一个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(此时发生了意外


我哪里出错了?

如果ERRORLEVEL…
是DOS时代以来支持的一种特殊语法,那么在WinNT中添加了
%ERRORLEVEL%
变量支持

原始语法如下所示:

call someapp.exe
if errorlevel 1 goto handleerror1orhigher
echo succuess... 
IF '%ERRORLEVEL%'=='0' GOTO OK
要使用该变量,请使用正常的IF语法:
IF%errorlevel%==0 echo success…

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

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

call someapp.exe && (echo success) || (echo error!)
已知(至少)两种情况下errorlevel被破坏,您必须改用
|


    • 负错误级别可能会产生问题。请尝试以下方法:

      call someapp.exe
      if errorlevel 1 goto handleerror1orhigher
      echo succuess... 
      
      IF '%ERRORLEVEL%'=='0' GOTO OK
      

      嗯,也许
      1(
      是错误的?你试过
      1(
      用空格吗?顺便说一下,如果errorlevel 1(…或
      如果%errorlevel%==1,请使用
      (…
      @jeb:这似乎是错误的实际原因,我的意思是,OP脚本中的语法混乱。问题是%ERRORLEVEL%被替换了。如果ERRORLEVEL%使用,而不是%ERRORLEVEL%使用。我只使用了
      &
      |
      ,从来没有在一行中使用过这两个。不知道它们在一起基本上是一样的
      IF…ELSE
      。这是一件很好的事情,谢谢!如果errorlevel 0表示“如果errorlevel大于或等于零”,即任何值。要求成功的正确方法是:如果不是errorlevel 1 echo success…@Aacini:是的,但我在0之前检查1,这是一种有效的方法。@Anders:是的,但在这种情况下,整个“if errorlevel 0”部分是不必要的,可能会让新手感到困惑。有趣的是,如果您在for循环中检查它,您可以将其与call:successLabel和call:failLabel结合使用(在正常流程中,您可以与goto结合使用)该语法不适合在批处理文件中使用。它应为:IF ERRORLEVEL 0 GOTOOK@SPlatten调用svn后进行检查,“IF ERRORLEVEL 0 GOTO OK”不起作用。检查“IF(%ERRORLEVEL%)==(0)GOTO OK”起作用。键用%%包围环境变量,这意味着获取变量的内容。