目次
その他の関連しそうな記事
「exit /b」で変数「errorlevel」に値を入れて返す
バッチファイルやサブルーチン内でメインプログラムへ戻るときのコマンドとして、
1 |
exit /b |
があります。(※バッチファイルやサブルーチンを呼び出す方法は「call(バッチファイルやサブルーチンの呼び出し) -コマンド別解説-」や「バッチファイルでサブルーチンを使用する -やりたいこと検索-」をご覧下さい。)
「exit /b」の後に数字を指定することで、変数「errorlevel」に値を代入し戻り値として利用することができます。
1 |
exit /b [errorlevelに代入する数字] |
以下、サブルーチンから変数「errorlevel」に値を入れてメインプログラムへ戻り値を返すバッチファイルの例(get_errorlevel.bat)です。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
@echo off rem サブルーチンの呼び出し call :subroutine echo %errorlevel% exit /b rem 呼び出されるサブルーチン :subroutine rem 戻り値を「errorlevel」に設定 exit /b 1 |
4行目でサブルーチンを呼び出しています。10行目からが呼び出されるサブルーチンの内容ですが、最後の行で「exit /d 1」として、戻り値として「1」を変数「errorlevel」に代入しています。
以下、実行結果です。
5行目の「echo」コマンドで変数「errorlevel」の中身が表示されていますが、最終行で指定した「1」が格納されていることが分かります。
もう一つ、サブルーチンに引数を受け渡した値で変数「errorlevel」の値を設定するバッチファイル例(get_errorlevel_if.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 引数を渡してサブルーチンの呼び出し call :subroutine 10 rem 戻り値「errorlevel」の値から「if」コマンドで条件分岐 if %errorlevel% equ 1 ( echo 引き数は10より大きい値です。 ) else if %errorlevel% equ 2 ( echo 引き数は10以下です。 ) exit /b rem 呼び出されるサブルーチン :subroutine rem 戻り値を引数「%1」に応じて「errorlevel」に設定 if %1 gtr 10 ( exit /b 1 ) else ( exit /b 2 ) |
4行目では、引数を指定してサブルーチンを呼び出しています。
サブルーチン内では、引数に応じた値を変数「errorlevel」に代入し、メインプログラムへ戻します(19行目~23行目)。また、サブルーチンからの戻り値に応じて、「if」コマンドによる条件分岐を行っています(7行目~11行目)。
「if」文については、「if(条件分岐) -コマンド別解説-」で詳しく解説しています。
以下、実行結果です。
呼び出すものがサブルーチンではなく、バッチファイルでも同様です。呼び出されるバッチファイル内で「exit /b [数字]」を記述すれば、メインプログラムの方で、変数「errorlevel」を参照するれば指定した[数字]を得ることができます。
普通の変数に値を代入して取り出す
バッチファイルやサブルーチンから値を得る方法は変数「errorlevel」を使う方法だけではありません。他の方法として、もっと単純に「普通の変数に値を代入するだけ」という方法があります。これは、通常時に変数を利用するように、呼び出したサブルーチンやバッチファイル内で、
1 |
set value=100 |
などとすれば、どこからでも変数「value」の値を「%value%」として参照できますので、メインプログラムに戻った後でもこの変数を利用すればよいだけです。
以下、バッチファイル例です。
1 2 3 4 5 6 7 8 9 10 11 12 |
@echo off rem サブルーチンの呼び出し call :subroutine rem 変数「value」の中を確認 echo %value% rem 呼び出すサブルーチン :subroutine rem 変数「value」に「100」を代入 set value=100 exit /b |
サブルーチン内で代入した変数(11行目)は、メインプログラムに戻った後も使えます(6行目)。
以下、実行結果を示します。