web-dev-qa-db-ja.com

バッチファイルテストエラーレベル

別の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(この時点では予想外でした。

私はここでどこが間違っていますか?

18
Daniel Powell

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!)

エラーレベルが壊れている(少なくとも)2つの既知のケースがあり、代わりに||を使用する必要があります。

42
Anders

負のエラーレベルは問題を引き起こす可能性があります。次のようなものを試してください:

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