バッチファイルを使用してプロセスを開始し、ゼロ以外の値が返された場合は、別のことを行います。そのための正しい構文が必要です。
このようなもの:
::x.bat
@set RetCode=My.exe
@if %retcode% is nonzero
handleError.exe
ボーナスとして、次の質問に答えることを検討してください:)
if
を使用して複合ステートメントを記述する方法My.exe
は、DLLが欠落している場合は動作しますか?動作しない場合、どのように検出できますかMy.exe
起動に失敗しました?ERRORLEVEL
には、最後のコマンドの戻りコードが含まれます。残念ながら、確認できるのは>=
それのための。
If
ステートメントのMSDNドキュメント のこの行に特に注意してください。
errorlevelNumber
Cmd.exeによって実行された前のプログラムがNumber以上の終了コードを返した場合にのみ、真の条件を指定します。
したがって、0をチェックするには、箱の外で考える必要があります。
IF ERRORLEVEL 1 GOTO errorHandling
REM no error here, errolevel == 0
:errorHandling
または、最初にエラー処理をコーディングする場合:
IF NOT ERRORLEVEL 1 GOTO no_error
REM errorhandling, errorlevel >= 1
:no_error
BATプログラミングの詳細: http://www.ericphelps.com/batch/ またはWindows固有のcmd
: バッチファイルを使用したMSDN
Ifで複合文を書く方法は?
括弧を使用してifブロックに複合ステートメントを書くことができます。最初の括弧はifとともに行に来なければならず、2番目は単独で行に来なければなりません。
if %ERRORLEVEL% == 0 (
echo ErrorLevel is zero
echo A second statement
) else if %ERRORLEVEL% == 1 (
echo ErrorLevel is one
echo A second statement
) else (
echo ErrorLevel is > 1
echo A second statement
)
私が取り組んでいるプロジェクトでは、このようなことをしています。 errorlevel
キーワードを使用するため、次のようになります。
call myExe.exe
if errorlevel 1 (
goto build_fail
)
それは私たちのために働くようです。エコーなどのように、括弧に複数のコマンドを入力できることに注意してください。また、build_failは次のように定義されていることに注意してください。
:build_fail
echo ********** BUILD FAILURE **********
exit /b 1
これは質問に対する答えではありませんが、見つけるたびにここに行きますプロセスがゼロ以外のコードを返したときにエラーコードを終了する方法。
そのための答えは次のとおりです。
if %ERRORLEVEL% NEQ 0 exit %ERRORLEVEL%