40

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

このようなもの:

::x.bat

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

おまけとして、次の質問に答えることを検討してください:)

  • で複合文を書くにはif
  • My.exe一部の DLL が見つからないためにアプリケーションが起動しない場合、if は機能しますか? My.exeそうでない場合、起動に失敗したことをどのように検出できますか?
4

6 に答える 6

65

ERRORLEVEL最後のコマンドの戻りコードが含まれます。悲しいことに、あなたはそれを確認することしかできません>=

ステートメントのMSDN ドキュメントのIf次の行に特に注意してください。

エラーレベル番号

Cmd.exe によって実行された前のプログラムがNumber以上の終了コードを返した場合にのみ、true 条件を指定します。

したがって、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

于 2010-12-15T14:40:34.497 に答える
18

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
)
于 2010-12-15T15:06:58.283 に答える
4

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

call myExe.exe
if errorlevel 1 (
  goto build_fail
)

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

:build_fail
echo ********** BUILD FAILURE **********
exit /b 1
于 2010-12-15T14:43:07.760 に答える
0

プロセス/コマンドが 0 を返したかどうかを確認するには、演算子を使用します。&& == 0 or not == 0 ||

スクリプトに演算子を追加するだけです:

execute_command && (

       echo\Return 0, with no execution error
) || (
        echo\Return non 0, something went wrong
     )

command && echo\Return 0 || echo\Return non 0
于 2020-09-15T09:04:27.243 に答える