web-dev-qa-db-ja.com

プロセスがバッチファイルで0を返すかどうかを確認します

バッチファイルを使用してプロセスを開始し、ゼロ以外の値が返された場合は、別のことを行います。そのための正しい構文が必要です。

このようなもの:

::x.bat

@set RetCode=My.exe
@if %retcode% is nonzero
   handleError.exe

ボーナスとして、次の質問に答えることを検討してください:)

  • ifを使用して複合ステートメントを記述する方法
  • アプリケーションがMy.exeは、DLLが欠落している場合は動作しますか?動作しない場合、どのように検出できますかMy.exe 起動に失敗しました?
34
Armen Tsirunyan

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

55
Eduard Wirch

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
)
15
shf301

私が取り組んでいるプロジェクトでは、このようなことをしています。 errorlevelキーワードを使用するため、次のようになります。

call myExe.exe
if errorlevel 1 (
  goto build_fail
)

それは私たちのために働くようです。エコーなどのように、括弧に複数のコマンドを入力できることに注意してください。また、build_failは次のように定義されていることに注意してください。

:build_fail
echo ********** BUILD FAILURE **********
exit /b 1
3
Merky

これは質問に対する答えではありませんが、見つけるたびにここに行きますプロセスがゼロ以外のコードを返したときにエラーコードを終了する方法

そのための答えは次のとおりです。

if %ERRORLEVEL% NEQ 0 exit %ERRORLEVEL%
1
Techniquab