目次
バッチファイルを呼び出す
バッチファイル内から別のバッチファイルを呼び出すときには「call」コマンドを使います。使用方法は、「call」コマンドの引数として呼び出したいバッチファイル名を書きます。
1 |
call [呼び出したいバッチファイル名] |
実際に使用したバッチファイル例を以下に示します。呼び出す側のバッチファイルを「main.bat」、呼び出される側のバッチファイルを「sub.bat」としましょう。
「main.bat」は以下のようにします。
1 2 3 4 5 6 7 8 |
@echo off rem sub.batの呼び出し call sub.bat echo; echo メインプログラムの終了 echo; |
4行目の「call」コマンドで別のバッチファイル「sub.bat」を呼び出しています。
そして、呼び出される「sub.bat」は、以下の通りです。
1 2 3 4 5 6 7 |
@echo off echo; echo sub.batの中です。 echo; pause |
ただ、「sub.batの中です。」と表示するだけのバッチファイルです。処理が「sub.bat」の中に入ったことを確認しています。
7行目の「pause」コマンドで、プログラムを一時停止していることに注目して下さい。これは、最後の節「もう一つのコマンド「start」」で紹介する「start」コマンドとの違いについて説明するときに重要になります。
では、このバッチファイル「main.bat」を実行してみます。以下、実行結果です。
「sub.bat」が呼び出され、一時停止してから何かキーを押すと、「main.bat」内に戻りプログラムが終了しています。
このように、「call」コマンドでバッチファイルを呼び出すと、プログラムの動きは、
main.bat → sub.bat → main.bat
となります。
サブルーチンを呼び出す
「call」コマンドはサブルーチンを呼び出すときにも使えます。
1 |
call :[サブルーチン名] |
サブルーチンについては、「バッチファイルでサブルーチンを使用する -やりたいことから検索-」をご覧下さい。
以下のバッチファイル(call_subroutine.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 サブルーチンの呼び出し call :subroutine echo; echo メインプログラムの終了 echo; pause exit /b :subroutine echo; echo ここはサブルーチン内です。 echo; pause exit /b |
4行目でサブルーチン「subroutine」を呼び出しています。
呼び出すサブルーチンは14行目からであり、その中でメッセージを出力した後一時停止し、メインプログラムに帰ります。
以下、実行結果です。
バッチファイルを呼び出したときと同様に、サブルーチン「subroutine」が呼び出され一時停止してから何かキーを押すと、メインプログラムに戻りプログラムが終了しています。
すなわち、前節で説明したバッチファイルを呼び出す時と同様に、プログラムの進行は、
メイン → サブルーチン → メイン
という流れです。
もう一つのコマンド「start」
バッチファイルやサブルーチンを呼び出すコマンドとして「call」コマンドの他に「start」コマンドというものがあります。この2つのコマンドは使い方は同じで引数に呼び出したいバッチファイルやサブルーチンを指定します。
注意すべきは、「start」コマンドで呼び出しときは、その呼び出したバッチファイルが終了するのを待たずにメインプログラムは先へ進んでしまうことです。
最初の節で使用したバッチファイル「main.bat」(以下にもう一度示す)、
1 2 3 4 5 6 7 8 |
@echo off rem sub.batの呼び出し call sub.bat echo; echo メインプログラムの終了 echo; |
これを「call」ではなく「start」コマンドに変えてみます(main_start.bat)。また、最後に「pause」コマンドを付けたしました。(以下に変更後のバッチファイルを示す)
1 2 3 4 5 6 7 8 9 |
@echo off rem sub.batの呼び出し start sub.bat echo; echo メインプログラムの終了 echo; pause |
実行すると、別ウィンドウが立ち上がりそこで「sub.bat」が実行され、6行目の「pause」で一時停止しています。つまり、「sub.bat」はまだ終わっていません。
しかし、「main.bat」の方のウィンドウを確認すると、「sub.bat」の終了を待たずに、プログラムが終了しています。
【main_start.bat】
【sub.bat】
このように「start」コマンドでは、その呼び出したバッチファイルが終了するのを待たずにメインプログラムは先へ進んでしまいます。
このことを考慮して、2つのコマンド(「call」と「start」)は用途によって使い分けることが必要です。
コメント