目次
その他の関連しそうな記事
「errorlevel」を参照する
バッチファイル内でコマンドエラーが発生した場合、プログラムを中止する方法を解説します。
コマンドエラーが起きたかどうかは、調べたいコマンドの後で変数「errorlevel」を参照すれば確認することができます。
以下、簡単な確認用のバッチファイル(errorlevel_after_command.bat)と実行結果です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
@echo off rem コマンド実行(成功) type nul > file.txt echo コマンド成功 → %errorlevel% echo; rem コマンド実行(失敗1) type echo コマンド失敗1 → %errorlevel% echo; rem コマンド実行(失敗2) yahoo mail echo コマンド失敗2 → %errorlevel% |
4行目では、正しいコマンドを入力しています。5行目で正常に実行されたコマンドに後に変数「errorlevel」の中身をチェックします。10行目と15行目でも同様に「errorlevel」の中身を確認していますが、こちらは直前のコマンドが正しくなく、異常終了した後の「errorlevel」となっています。
以下、このバッチファイルの実行結果です。
コマンドが成功していれば「0」、エラーで以上終了していれば「0以外」が入っています。この当たりの話を詳しく知りたい方は、「errorlevel(終了コードを取得する) -コマンド別解説-」で詳しい解説を行っていますのでそちらを参考にして下さい。
したがって、コマンドエラーが生じた場合にバッチファイルを終了したい場合は、「errorlevel」の値が「0」以外ならバッチプログラムの終了コード「exit /b」を実行すればよいでしょう。次節からその例を紹介します。
「if」を使用して中止する
まずは、「if」コマンドを使ってコマンドエラーの場合に終了する方法です。
「if」で「neq」演算子を使って、「errorlevel」の値が「0」以外ならバッチプログラムを止めればよいでしょう。
以下にサンプルプログラム(stop_p_if.bat)を示します。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
@echo off rem エラーを起こすコマンドの実行 type rem 「0」以外のときバッチファイルを終了 if %errorlevel% neq 0 ( echo; echo エラー発生:バッチファイルは異常終了しました。 echo 「errorlevel」は「%errorlevel%」です。 exit /b ) |
4行目でワザとエラーを起こすコマンドを実行しています。これで、「errorlevel」には「1」が代入されました。
そして、7行目の「if」コマンドで「errorlevel」が「0」以外の場合に( )の中に入るようにし、「exit /b」でプログラムを中止しています。
以下、実行結果です。
「if errorlevel」を使用して中止する
続いて、「if errorlevel」を使用する方法です。
基本的な方針は、前節の「if」を使用した場合と同様で、「errorlevel」の値が「0」以外ならバッチプログラムを止めます。
1 |
if errorlevel [数字] call :[ラベル] |
を使って、[数字]に指定した値より「errorlevel」が大きいときは[ラベル]に飛びます。飛んだ先で、プログラムを終了させます。「if errorlevel」コマンドに関しては、「errorlevelの値から分岐処理を行う -やりたいことから検索-」をご覧下さい。
以下に、サンプルプログラム(stop_p_if_errorlevel.bat)を示します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
@echo off rem エラーを起こすコマンドの実行 type rem 「1」以上のときバッチファイルを終了 if errorlevel 1 call :stop exit /b :stop echo; echo エラー発生:バッチファイルを異常終了します。 echo 「errorlevel」は「%errorlevel%」です。 pause exit |
7行目の「if errorlevel 1」で「errorlevel」が1以上の場合にサブルーチン「:stop」へ飛んでいます。
その中で、エラーメッセージを出力し、最後に「exit」コマンドでバッチファイルを終了しています。
ここで、「exit」に「/b」オプションを付けていないことに注意して下さい。「exit /b」はサブルーチンを終了して、メインプログラムに戻りますが、「exit」はそこでプログラムを終了させます。