Windowsバッチ サブルーチン/別バッチファイルの呼び出し
call : サブルーチンの呼び出し
サブルーチンは、下記の17~20行目や、24~32行目のように、:[ラベル]~exit /bの部分になる。
サブルーチンの呼び出しは、callを使う。
6行目は引数無しの呼び出し、9行目は引数有りの呼び出しの例である。
@echo off rem ------------------------------------ rem メイン処理 echo メイン処理の最初 call :subroutine1 echo サブルーチン1から戻ってきた。 call :subroutine2 12 56 echo サブルーチン2から戻ってきた。 echo メイン処理の最後 exit /b rem ------------------------------------ rem サブルーチン1の処理 :subroutine1 echo サブルーチン1の最初 echo サブルーチン1の最後 exit /b rem ------------------------------------ rem サブルーチン2の処理 :subroutine2 echo サブルーチン2の最初 echo 引数0 = %0 echo 引数1 = %1 echo 引数2 = %2 set /a sum = %1 + %2 echo 引数1 + 引数2 = %sum% echo サブルーチン2の最後 exit /b
メイン処理の最初 サブルーチン1の最初 サブルーチン1の最後 サブルーチン1から戻ってきた。 サブルーチン2の最初 引数0 = :subroutine2 引数1 = 12 引数2 = 56 引数1 + 引数2 = 68 サブルーチン2の最後 サブルーチン2から戻ってきた。 メイン処理の最後
call : 別のバッチファイルの呼び出し
別のバッチファイルの呼び出しは、callを使う。
メイン処理test_mainA.batの5行目は引数無しの呼び出し、8行目は引数有りの呼び出しの例である。
rem test_mainA.bat @echo off echo メイン処理の最初 call test_child1.bat echo 子バッチ1から戻ってきた。 call test_child2.bat 12 56 echo 子バッチ2から戻ってきた。 echo メイン処理の最後 exit /b
rem test_child1.bat rem 子バッチ1の処理 @echo off echo 子バッチ1の最初 pause echo 子バッチ1の最後 exit /b
rem test_child2.bat rem 子バッチ2の処理 @echo off echo 子バッチ2の最初 echo 引数0 = %0 echo 引数1 = %1 echo 引数2 = %2 pause set /a sum = %1 + %2 echo 引数1 + 引数2 = %sum% echo 子バッチ2の最後 exit /b
メイン処理の最初 子バッチ1の最初 続行するには何かキーを押してください . . . 子バッチ1の最後 子バッチ1から戻ってきた。 子バッチ2の最初 引数0 = test_child2.bat 引数1 = 12 引数2 = 56 続行するには何かキーを押してください . . . 引数1 + 引数2 = 68 子バッチ2の最後 子バッチ2から戻ってきた。 メイン処理の最後
start : 別のバッチファイルの呼び出し
上記でのcallを使ったバッチファイルの呼び出しは、呼び出した先の処理が終了して制御が戻ってくるまで、メイン処理は待ち続ける。戻ってきたらその続きを処理する。
バッチファイルの呼び出しをstartに変えると、メインの処理は特に待たずにその続きを処理する。
startで呼び出された別バッチファイルは、メインの処理とは別処理として処理を開始する。
メイン処理test_mainB.batの5行目は引数無しの呼び出し、8行目は引数有りの呼び出しの例である。
test_mainB.batを実行すると、この2つの呼び出しはそれぞれ別処理を開始させるので、各々で別ウィンドウが立ち上がる。
rem test_mainB.bat @echo off echo メイン処理の最初 start test_child1.bat echo 子バッチ1の終了待たずに進む。 start test_child2.bat 12 56 echo 子バッチ2の終了待たずに進む。 echo メイン処理の最後 exit /b
メイン処理の最初 子バッチ1の終了待たずに進む。 子バッチ2の終了待たずに進む。 メイン処理の最後
子バッチ1の最初 続行するには何かキーを押してください . . . 子バッチ1の最後
子バッチ2の最初 引数0 = test_child2.bat 引数1 = 12 引数2 = 56 続行するには何かキーを押してください . . . 引数1 + 引数2 = 68 子バッチ2の最後
exit /b と exit
上記の全てのバッチファイルでは、/b無しのexitを使用せず、exit /bを使用してきた。
exit /bは、サブルーチン/バッチファイルの呼び出し元に処理の制御を戻すように作用する。
/b無しのexitは、処理をそこで終了させる。この違いに注意すること。
バッチファイルでexit /bを使用している場合、コマンドプロンプトウィンドウからこのバッチファイルを起動してその処理が終了すると、コマンドプロンプトウィンドウに制御が戻る。
バッチファイルで/b無しのexitを使用している場合、コマンドプロンプトウィンドウからこのバッチファイルを起動してその処理が終了すると、コマンドプロンプトウィンドウまで消えてしまう。