Categories: Windows

バッチファイル(bat)から他のバッチファイルを実行する方法 -start&callコマンド-

バッチファイルを用いて複雑な処理を実行するときに、あるバッチファイルから他のバッチファイルを実行したい場合があります。

本記事では、これを実現するコマンドとしてstartコマンドとcallコマンドを紹介したいと思います。

callコマンドの使い方

バッチファイルから他のバッチファイルを呼び出す際に、私がよく使うのはcallコマンドなので、まずはcallコマンドから説明をします。

callコマンドの使い方はシンプルで、以下のようにcallの後に[実行するバッチファイル名]を記述して、後は実行に際して渡したい引数があれば、順番に記述していきます。無ければ引数の記述は不要です。

call [実行するバッチファイル名] [引数1] [引数2]……

callコマンドを用いた実行サンプル

サンプルを見る方が理解が早いかと思います。以下に実際に実行するバッチファイル「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」の実行結果は以下となります。

引数へのアクセス方法:「%0」「%1」「%2」……

上記のサンプルの通り、child.batで引数の値にアクセスする方法は「%0」「%1」「%2」と記述することです。

ただし「%0」には実行されたファイルのファイル名(child.bat)が入ります。

与えた引数(例えばabcdや10)は「%1」や「%2」に順次入っていきます。引数が3個あれば3つ目は「%3」になります。

startコマンドの使い方

次にstartコマンドについて紹介します。文法はcallコマンドと同じなので、上記のサンプルのcallコマンドをstartコマンドに置き換えて実行した結果を以下に示します。

@echo off
start child.bat abcd 10
start child.bat efgh 20
echo Finish
pause

callコマンドとの違いは以下の通りです。

  • callコマンド:呼び出したバッチファイルの処理の完了を待ち、次の処理に進む
  • startコマンド:バッチファイルを呼び出した後、その終了を待たずに次の処理に進む

そのため上記の例において、callコマンドの場合、「child.batの実行」→「child.batの実行」→「Finish」の表示とシーケンシャルに実行がされます。

一方、「start」コマンドの場合、以下の実行が処理の終了を待たずに同時に行われるため、コマンドプロンプトが3個表示されます。また、この3個のコマンドプロンプトは同時に処理が行われるため、child.batの実行完了を待ってparent.batの処理を行うようなことはできなくなります。

Haruoka