ここでは、バッチファイル内でさらに別のバッチファイルを呼び出す方法を紹介します。
プログラムが大規模になってくるとプログラム内でさらにプログラムを呼び出したい場合があります。そんなときは「start」コマンドまたは「call」コマンドを使用します。
その他の関連しそうな記事
「start」コマンドを使う
さっそく使ってみましょう。
「第14章」フォルダの下に、「main.bat」を作成し、以下のように打ち込んで下さい。
1 2 3 |
@echo off start child1.bat |
バッチファイル「main.bat」の中でバッチファイル「child1.bat」を呼び出しています。
続いて、呼び出す「child1.bat」を以下のように作ります。
1 2 3 4 5 |
@echo off echo child1が呼び出されました。 pause echo child1を終了します。 |
単に、「child1が呼び出されました。」と出力して、「child1.bat」が実行されたかを知るためのバッチです。
ただし、プログラムを終了する前に「pause」コマンドをつけています。この「pause」はユーザが何かキーを押すまでその場所で処理を一時停止するコマンドです。このコマンドも使用頻度が高いコマンドなので覚えておきましょう。
では、「main.bat」をコマンドプロンプトから実行してみましょう。
別のコマンドプロンプトのウィンドウが開かれそこに「child1が呼び出されました。」と出力されたと思います。
続いて「child1.bat」ファイルをコピーして「child2.bat」と名前を付けます。この中身を、
1 2 3 4 5 |
@echo off echo child2が呼び出されました。 pause echo child2を終了します。 |
と編集して下さい。
そして、「main_start.bat」を作り、
1 2 3 4 5 |
@echo off start child1.bat start child2.bat |
とし、二つのバッチファイル(「child1.bat」と「child2.bat」)を呼び出します。
実行すると二つのウィンドウが立ち上がり両方の「child」バッチが一気に実行されていることが分かります。
注目したいのは、はじめに呼び出した「child1.bat」の中で「pause」によって処理を止めたにも関わらず、「start child2.bat」が実行され二つ目の新しいウィンドが開いているということです。
「main_start.bat」は「start」コマンドで「child1.bat」を呼び出すと、「child1.bat」の実行終了を待たずに、「start child2.bat」を実行したのです。
このように「start」コマンドは呼び出したバッチファイルの終了を待たずに次のコマンドへ移ります。
「call」コマンドを使う
場合によってはちゃんと「child1.bat」の終了を待ってから「child2.bat」へ処理を移したいときもあるでしょう。
例えば、「child2.bat」のプログラム内で「child1.bat」で作られるファイルを利用する場合などは、ファイルが作られる前に「child2.bat」を実行したくありません。このような場合は「start」コマンドの代わりに「call」コマンドを使います。
「main_call.bat」を作り、
1 2 3 4 5 |
@echo off call child1.bat call child2.bat |
として、実行してみてください。
今度は、新しくウィンドウが立ち上がらず、そのウィンド内で「child1.bat」が実行され「pause」で処理が止まっています。
何かキーを押して進めると、続いて「child2.bat」が実行されます。
このように、「call」を使用すると呼び出したバッチの処理が完了するまで次のコマンドには進まないようにすることができます。使用頻度としてはこの「call」コマンドの方が多いように思われます。
引数を渡す
これら「start」コマンドと「call」コマンドは引数を取ることができ、呼び出すバッチに文字列を引き渡すことができます。
「main_call2.bat」を作成し、以下のコードを書きます。
1 2 3 |
@echo off call child_call2.bat call2 |
「call child_call2.bat」では引数「call2」を指定して、「child_call2.bat」に渡しています。
「child_call2.bat」を以下のように作りましょう。
1 2 3 4 5 |
@echo off echo child_%1が呼び出されました。 pause echo child_%1を終了します。 |
これを実行した結果は次のようになります。
「%1」に引数で指定した「call2」が入っていることが分かります。
呼び出す側のバッチでは以下のように複数の引数を設定できます。
1 |
call [呼び出すバッチファイル] [第1引数] [第2引数] [第3引数] ... |
呼び出されたバッチファイル内で複数の引数を取得するには「%1」、「%2」、「%3」…とします。
この例では、「call」コマンドを使用しましたが、「start」コマンドも引数を使用でき、使用方法は同様です。
第14章のまとめ
ここでは、バッチファイル内でさらにバッチファイルを呼び出す「start」コマンドおよび「call」コマンドを学びました。
これらは、大規模なバッチファイルを作成するときには必須の機能です。一つのファイルに長々とプログラムのコードを書くのではなく、プログラムを分割していくつかのファイルに分けて書き、必要な場所で「call」コマンドや「start」コマンドを使って呼び出す方が、分かりやすいプログラムになります。
【入門講義 第14章のまとめ】
バッチ内からバッチを呼び出すコマンドを学んだ
- その1 「start」コマンドは、呼び出したバッチファイルの終了を待たずに、次のコマンドを実行する。
- その2 一方、「call」コマンドは、呼び出したバッチファイルの終了を待ってから、次のコマンドを実行する。
- その3 引数も通常のコマンドプロンプトで使用する時と同じように、設定できる。
なにか不明な点やうまくいかない場合は、「お問い合わせフォーム」からお気軽にお問い合わせ下さい。
次章はいよいよバッチファイル入門講義の最後のセクションです。いろんなフォルダからファイルを集めるバッチを作っていきます。