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

にメンテナンス済み

バッチファイルの活用範囲が広がると、似た処理を行うバッチファイルが複数できたり、スケジュール実行用のバッチファイルから個別のバッチファイルを順番に呼び出したくなったりします。

このページでは、バッチファイルから他のバッチファイルを実行するcallコマンドについて、基本的な使い方から、callを付けない場合との違い、引数の渡し方、ラベルの呼び出しまで、サンプルコード付きで説明します。

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

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

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

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

バッチファイル名とそのバッチファイルに渡すパラメータを指定します。拡張子(.cmdや.bat)は省略できますが、同名のファイルが複数ある場合に意図しないファイルが実行されないよう、明記しておくことをおすすめします。

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

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を実行すると、以下のように表示されます。

- □ ×
コマンド プロンプトのアイコン
コマンド プロンプト
Microsoft Windows [Version xx.x.xxxxx.xxx]
(c) 2026 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) 2026 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>
おすすめ書籍※ 広告を含む場合があります
中小企業経営者のためのRPA入門 RPA導入を成功させる方法

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

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

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

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

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

知識・才能ゼロでもらく~に月10万円稼ぐ! よくわかる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
- □ ×
コマンド プロンプトのアイコン
コマンド プロンプト
Microsoft Windows [Version xx.x.xxxxx.xxx]
(c) 2026 Ribbit App Development All rights reserved.
 
C:\users\user>sample.cmd
こんにちは、Taroさん。
こんにちは、Hanakoさん。
C:\users\user>

サブルーチンの詳しい書き方については、以下のページを参照してください。

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

バッチファイルを呼び出す際、呼び出したバッチファイルの完了を待たずに、次の処理を実行したい場合もあります。

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

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

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

まとめ

  • 他のバッチファイルを実行して呼び出し元に戻りたい場合は、callを付けて実行する
  • 引数はcall callee.cmd 1のようにファイル名の後ろに指定し、呼び出し先では%1で受け取る
  • 同じファイル内のラベルはcall :ラベル名で呼び出し、exit /bで戻る
  • 完了を待たずに実行したい場合はstartを使う

練習問題

練習問題

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