本文へスキップ
BecomeCoder

バッチファイルコース · 第4章 引数と制御構文 · レッスン15

call で別のバッチを呼ぶ ― 部品に分ける

導入

処理が長くなってきたら、機能ごとに別のバッチファイルへ分けて、call で呼び出すと整理できます。同じ処理を複数の場所から使い回せるようにもなります。

説明

call other.bat と書くと、other.bat を実行し、終わったら呼び出し元へ戻ってきますcall を付けずに other.bat と書くと、そちらへ移ったきり戻ってこない(元のバッチはそこで終わる)ので、戻ってきてほしいときは必ず call を付けます。

main.bat:

@echo off
echo === 処理を開始 ===
call setup.bat
echo メインの処理をします
call cleanup.bat
echo === すべて完了 ===
pause

setup.bat:

@echo off
echo [準備] フォルダを作成します
mkdir work 2>nul

引数を渡すこともでき、呼ばれた側は %1 などで受け取ります。call setup.bat work のように書けば、setup.bat の中で %1work になります。

同じバッチの中のラベルを呼ぶ 使い方も便利です。call :ラベル とすると、そのラベルの処理を「小さな部品(サブルーチン)」として実行し、goto :eof で呼び出し元へ戻れます。

@echo off
call :greet たろう
call :greet はなこ
goto :eof

:greet
echo こんにちは、%1 さん!
goto :eof

:greet を2回呼び分け、それぞれ違う名前を渡しています。同じ処理をまとめて名前を付けられるので、バッチが読みやすくなります。

callgoto の違い goto :ラベル は「飛んだきり戻らない」、call :ラベル は「実行して戻ってくる」。部品として何度も使いたいなら call、一方通行の分岐なら goto です。

やってみよう

call :ラベル 引数 の形で、名前を渡すとあいさつを返すサブルーチンを作り、3人分呼び出してみましょう。第5章では、これらを組み合わせた実用的なバッチに挑戦します。