Error handling 批处理文件测试错误级别
我试图在另一个exe成功执行时,有条件地从批处理文件运行exe 我尝试了几种不同的IF和ERRORLEVEL组合,但似乎都不起作用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
"..\..\..\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”起作用。键用%%包围环境变量,这意味着获取变量的内容。