call - 他バッチファイルの実行

にメンテナンス済み

バッチファイルの活用範囲が広がっていくと、プログラムの中で似た処理を行うバッチファイルが複数存在するようなケースはよく起こります。

そのような場合、同じ処理を複数のバッチファイルに記述するのは非効率的ですし、メンテナンスの工数も増えてしまいます。

また、別々で作成した複数のバッチファイルを、スケジュール実行用のバッチファイルから呼び出すといった操作は、バッチファイルを使う上でよくあるケースです。

このページでは、バッチファイルから他のバッチファイルを実行する方法について、基本的な使い方からオプションの設定方法まで分かり易く説明しています。

call コマンドの基本的な使い方

バッチファイルから他のバッチファイルを呼び出す際は、callコマンドを使用します。

callコマンドの基本的な使い方は以下の通りです。

call <バッチファイル名> [...パラメータ]

オプションは存在せず、バッチファイル名とそのバッチファイルに渡すパラメータのみを指定します。

callコマンドを使用すると、指定したバッチファイルが実行され、完了後に呼び出し元のバッチファイルに戻ります。

call コマンドの具体例

他のバッチファイルの実行

例として、直接実行するcaller.cmdと、呼び出されるcallee.cmdを用意します。

caller.cmdは以下のようになります。

@echo off

echo caller.cmdを開始しました。

call callee.cmd

echo caller.cmdが終了しました。
文字化けが発生する場合

ファイルの文字コードがShift-JISとなっていることを確認してください。

同様に、callee.cmdは以下のようになります。

@echo off

echo callee.cmdを開始しました。

echo callee.cmdが終了しました。

上記のように設定した上で、caller.cmdを実行すると、以下のように表示されます。

×
コマンド プロンプトのアイコン
コマンド プロンプト
Microsoft Windows [Version xx.x.xxxxx.xxx]
(c) 2024 Ribbit App Development All rights reserved.
 
C:\users\user>caller.cmd
caller.cmdを開始しました。
callee.cmdを開始しました。
callee.cmdが終了しました。
caller.cmdが終了しました。
C:\users\user>

caller.cmdが実行されると、callコマンドによってcallee.cmdが実行され、callee.cmdが完了した後、caller.cmdに戻っています。

このように、callコマンドを使用すると、呼び出したバッチファイルは、呼び出されたバッチファイルが完了するまで待機状態となります。

引数を渡してバッチファイルを実行する

次に、バッチファイルに対して引数を渡して実行する方法について説明します。

直接実行するcaller.cmdと、呼び出されるcallee.cmdを用意します。

caller.cmdは以下のようになります。

@echo off

echo caller.cmdを開始しました。

call callee.cmd 1

call callee.cmd 2

echo caller.cmdが終了しました。

callee.cmdは以下のように記述します。

@echo off

echo callee.cmdを開始しました。

echo %1回目の実行です。

echo callee.cmdが終了しました。

上記のように設定した上で、caller.cmdを実行すると、以下のように表示されます。

×
コマンド プロンプトのアイコン
コマンド プロンプト
Microsoft Windows [Version xx.x.xxxxx.xxx]
(c) 2024 Ribbit App Development All rights reserved.
 
C:\users\user>caller.cmd
caller.cmdを開始しました。
callee.cmdを開始しました。
1回目の実行です。
callee.cmdが終了しました。
callee.cmdを開始しました。
2回目の実行です。
callee.cmdが終了しました。
caller.cmdが終了しました。
C:\users\user>

並列処理を実現したい場合

バッチファイルを呼び出す際、呼び出したバッチファイルの完了を待たずに、次の処理を実行したい場合もあるんじゃないでしょうか。

callコマンドを使用した場合、呼び出したバッチファイルの完了を待ってから次の処理を実行します。

もし完了を待たずに次の処理を実行したい場合は、startコマンドを使用します。

startコマンドについては、以下のページで詳しく説明しています。

練習問題

練習問題

caller.cmdcallee.cmdの2つのバッチファイルがあります。この状態で、caller.cmdを実行した場合、echo コマンドによって 3 番目に表示されるのはどれでしょうか。

caller.cmd
@echo off

echo caller.cmdを開始しました。

call callee.cmd

echo caller.cmdが終了しました。
callee.cmd
@echo off

echo callee.cmdを開始しました。

echo callee.cmdが終了しました。
回答がサーバーに送信されることはありません
#コマンドプロンプト #バッチファイル #引数 #コマンドライン #コマンド