バッチファイルを用いて複雑な処理を実行するときに、あるバッチファイルから他のバッチファイルを実行したい場合があります。
本記事では、これを実現するコマンドとしてstartコマンドとcallコマンドを紹介したいと思います。
バッチファイルから他のバッチファイルを呼び出す際に、私がよく使うのはcallコマンドなので、まずはcallコマンドから説明をします。
callコマンドの使い方はシンプルで、以下のようにcallの後に[実行するバッチファイル名]を記述して、後は実行に際して渡したい引数があれば、順番に記述していきます。無ければ引数の記述は不要です。
call [実行するバッチファイル名] [引数1] [引数2]……
サンプルを見る方が理解が早いかと思います。以下に実際に実行するバッチファイル「parent.bat」と、そこから呼び出されるバッチファイル「child.bat」を用いたサンプルを紹介します。
この二つのバッチは同一のフォルダに置かれているものとします。
@echo off
call child.bat abcd 10
call child.bat efgh 20
echo Finish
pause
@echo off
echo %0
echo %1
echo %2
pause
「parent.bat」の実行結果は以下となります。
上記のサンプルの通り、child.batで引数の値にアクセスする方法は「%0」「%1」「%2」と記述することです。
ただし「%0」には実行されたファイルのファイル名(child.bat)が入ります。
与えた引数(例えばabcdや10)は「%1」や「%2」に順次入っていきます。引数が3個あれば3つ目は「%3」になります。
次にstartコマンドについて紹介します。文法はcallコマンドと同じなので、上記のサンプルのcallコマンドをstartコマンドに置き換えて実行した結果を以下に示します。
@echo off
start child.bat abcd 10
start child.bat efgh 20
echo Finish
pause
callコマンドとの違いは以下の通りです。
そのため上記の例において、callコマンドの場合、「child.batの実行」→「child.batの実行」→「Finish」の表示とシーケンシャルに実行がされます。
一方、「start」コマンドの場合、以下の実行が処理の終了を待たずに同時に行われるため、コマンドプロンプトが3個表示されます。また、この3個のコマンドプロンプトは同時に処理が行われるため、child.batの実行完了を待ってparent.batの処理を行うようなことはできなくなります。