目次
「if」を使って分岐する
変数「errorlevel」の値を使って処理を分岐させるための一番単純な方法は、「if」コマンドを使うことです。
「errorlevel」変数だからといってそれ専用のコマンドを使うことはせず、どんな変数にも使える方法を使うということです。
以下のバッチファイル(errorlevel_if.bat)にサンプルプログラムを示します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
@echo off rem 「errorlevel」を設定するサブルーチンの呼び出し call :set_errorlevel rem 「errorlevel」の値によって「if」コマンドで分岐↓ rem 777の場合 if %errorlevel% equ 777 echo 終了コードは777です。 rem 777以外の場合 if %errorlevel% neq 777 echo 終了コードは777以外です。 rem 777以上の場合 if %errorlevel% geq 777 echo 終了コードは777以上です。 rem 777未満の場合 if %errorlevel% lss 777 echo 終了コードは777未満です。 rem 「errorlevel」を設定するサブルーチン :set_errorlevel exit /b 777 |
20,21行目がサブルーチンであり、これを4行目の「call」文で呼び出しています。サブルーチンを呼び出した後の戻り値「errorlevel」には「exit /b 777」によって「777」が格納されていますが、if文を使って「errorlevel」の値を判断しています。
以下、実行結果です。
先ほども述べたように、この方法は「errorlevel」以外のすべての変数について行えます。「if」コマンドについて詳しく知りたい方は、「if(条件分岐) -コマンド別解説-」を参照して下さい。
「if errorlevel」を使って分岐する
続いては、「errorlevel」特有の条件分岐方法です。「if errorlevel」コマンドもしくは、「if not errorlevel」コマンドを使います。
1 2 |
if errorlevel [数値] [[数値]以上の場合の処理] if not errorlevel [数値] [[数値]未満の場合の処理] |
ここで、注意すべきは指定した数値以上もしくは未満となっていることです。「if」のように、「=」や「以外」ではありません。
以下のバッチファイル(errorlevel_if_errorlvel.bat)にサンプルプログラムを示します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
@echo off rem 「errorlevel」を設定するサブルーチンの呼び出し call :set_errorlevel rem 777以上の場合 if errorlevel 777 echo 終了コードは777以上です。 rem 777未満の場合 if not errorlevel 777 echo 終了コードは777未満です。 rem 「errorlevel」を設定するサブルーチン :set_errorlevel exit /b 777 |
7行目と9行目の「if」条件文に注目です。「errorlevel」が「777」以上か未満かを判断しています。
以下、実行結果です。
サブルーチン名に「errorlevel」の値を含める
最後はサブルーチン名に「errorlevel」の値を含める方法です。
つまり、サブルーチン名に変数「errorlevel」を使ってやれば、「errorlevel」の値によって呼び出されるサブルーチンが変わり、「errorlevel」によって処理が分岐されるということです。
以下に、サンプルのバッチファイル(errorlevel_subroutine.bat)を示します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
@echo off rem 「errorlevel」を設定するサブルーチンの呼び出し call :set_errorlevel rem サブルーチンの呼び出し call :subroutine_%errorlevel% exit /b rem 7行目で呼び出すサブルーチン群 :subroutine_0 echo 終了コードは0です。 exit /b :subroutine_1 echo 終了コードは1です。 exit /b :subroutine_2 echo 終了コードは2です。 exit /b rem 「errorlevel」を設定するサブルーチン :set_errorlevel exit /b 0 |
7行目でサブルーチンを呼び出していますが、そのサブルーチン名の一部に「%errorlevel%」を使っているため、「errorlevel」によって呼び出されるサブルーチンが変わります。
10行目以下でサブルーチンを定義しています。ラベルの末尾(「_?」の部分)には「errorlevel」に代入されるかもしれない数字が指定されています。
以下、実行結果です。
いま、4行目でサブルーチンを呼び出した際、最終行で戻り値「errorlevel」に「0」が格納されるため、7行目のサブルーチン呼び出しは「subroutine_0」が呼び出されました。
この方法のメリットは何度も「if」文を書き、サブルーチンの呼び出しコマンドを書かなくていいということです。上記のバッチファイルであれば、7行目の「call :subroutine_%errorlevel%」を一つ書いておけば、あとはサブルーチンを増やしていくだけで様々な「errorlevel」に対応できます。