導入
処理が長くなってきたら、機能ごとに別のバッチファイルへ分けて、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 の中で %1 が work になります。
同じバッチの中のラベルを呼ぶ 使い方も便利です。call :ラベル とすると、そのラベルの処理を「小さな部品(サブルーチン)」として実行し、goto :eof で呼び出し元へ戻れます。
@echo off
call :greet たろう
call :greet はなこ
goto :eof
:greet
echo こんにちは、%1 さん!
goto :eof
:greet を2回呼び分け、それぞれ違う名前を渡しています。同じ処理をまとめて名前を付けられるので、バッチが読みやすくなります。
callとgotoの違いgoto :ラベルは「飛んだきり戻らない」、call :ラベルは「実行して戻ってくる」。部品として何度も使いたいならcall、一方通行の分岐ならgotoです。
やってみよう
call :ラベル 引数 の形で、名前を渡すとあいさつを返すサブルーチンを作り、3人分呼び出してみましょう。第5章では、これらを組み合わせた実用的なバッチに挑戦します。