call - 他バッチファイルの実行
バッチファイルの活用範囲が広がると、似た処理を行うバッチファイルが複数できたり、スケジュール実行用のバッチファイルから個別のバッチファイルを順番に呼び出したくなったりします。
このページでは、バッチファイルから他のバッチファイルを実行するcallコマンドについて、基本的な使い方から、callを付けない場合との違い、引数の渡し方、ラベルの呼び出しまで、サンプルコード付きで説明します。
call コマンドの基本的な使い方
バッチファイルから他のバッチファイルを呼び出す際は、callコマンドを使用します。
callコマンドの基本的な使い方は以下の通りです。
call <バッチファイル名> [...パラメータ]
バッチファイル名とそのバッチファイルに渡すパラメータを指定します。拡張子(.cmdや.bat)は省略できますが、同名のファイルが複数ある場合に意図しないファイルが実行されないよう、明記しておくことをおすすめします。
callコマンドを使用すると、指定したバッチファイルが実行され、完了後に呼び出し元のバッチファイルに戻ります。
バッチファイルの中から別のバッチファイルをcallなしで(callee.cmdのように)記述すると、そのバッチファイルに処理が移ったまま、呼び出し元には戻ってきません。呼び出し元の続きの処理を実行したい場合は、必ず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を実行すると、以下のように表示されます。
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を実行すると、以下のように表示されます。

中小企業経営者のためのRPA入門 RPA導入を成功させる方法

60分でわかる! AIエージェント 超 入門

コマンドラインの黒い画面が怖いんです。

知識・才能ゼロでもらく~に月10万円稼ぐ! よくわかるAI副業超入門
呼び出したバッチファイルの終了コードを受け取る
呼び出されたバッチファイルがexit /b <数値>で終了すると、その値がERRORLEVELに設定されます。呼び出し元では、callの直後にERRORLEVELを確認することで、処理の成否を判定できます。
@echo off
call callee.cmd
if errorlevel 1 (
echo callee.cmdが失敗しました。
exit /b 1
)
echo callee.cmdが正常に終了しました。
exit /bについては、以下のページで詳しく説明しています。
同じバッチファイル内のラベルを呼び出す
callコマンドには、別ファイルではなく、同じバッチファイル内のラベルを呼び出す使い方もあります。ラベル名の前に:を付けて指定し、サブルーチン側はexit /bで呼び出し元に戻ります。
@echo off
call :greet Taro
call :greet Hanako
exit /b
:greet
echo こんにちは、%1さん。
exit /b
サブルーチンの詳しい書き方については、以下のページを参照してください。
並列処理を実現したい場合
バッチファイルを呼び出す際、呼び出したバッチファイルの完了を待たずに、次の処理を実行したい場合もあります。
callコマンドを使用した場合、呼び出したバッチファイルの完了を待ってから次の処理を実行します。
もし完了を待たずに次の処理を実行したい場合は、startコマンドを使用します。
startコマンドについては、以下のページで詳しく説明しています。
まとめ
- 他のバッチファイルを実行して呼び出し元に戻りたい場合は、
callを付けて実行する - 引数は
call callee.cmd 1のようにファイル名の後ろに指定し、呼び出し先では%1で受け取る - 同じファイル内のラベルは
call :ラベル名で呼び出し、exit /bで戻る - 完了を待たずに実行したい場合は
startを使う