bat ファイルはバッチファイルともいい Windows のコマンドラインで実行できるコマンドを順次実行でき、ループ、条件分岐の様なフローを書ける簡易なシェルスクリプトです。これのリファレンスは次リンクです。
Windows のコマンド | Microsoft Learn
bat ファイルに似た立ち位置に PowerShell で実行できる ps1 ファイル(PowerShell スクリプトファイル)があります。こちらの方がより多機能かつ堅牢ですが Windows 上からダブルクリックで何か他のプログラムを動かすだけでしたら bat ファイルで十分です。batファイルのその様な用例として内部が複雑なプログラムを触らずに引数やオプションだけ bat ファイル上で指定しておく形があります。次がそれです。
rem 元動画 set input_video="hoge.mp4" rem 元動画に組み合わせる音声ファイル set input_audio="fuga.wav" rem 出力先 set output_video="piyo.mp4" rem ffmpeg に動画と音声を合成してもらう ffmpeg -i %input_video% ^ -i %input_audio% ^ %output_video%
この様にしておくとコマンドラインのヘルプとにらめっこすることが少なくなり、同じ引数やオプションを再度打ち込む必要がなくなります。
ダブルクリックで起動したbatファイルは実行完了するとウィンドウを閉じます。しかしながら実行完了後に何が起きていたか確認したい時は少なくありません。こういった時は pause を使って目的の部分の実行が完了しても bat ファイル自体を終わらせない方法が取られやすいです。これは例えば次です。
rem 元動画 set input_video="hoge.mp4" rem 元動画に組み合わせる音声ファイル set input_audio="fuga.wav" rem 出力先 set output_video="piyo.mp4" rem ffmpeg に動画と音声を合成してもらう ffmpeg -i %input_video% ^ -i %input_audio% ^ %output_video% rem ここで実行を停める。 rem コマンドラインには「続行するには何かキーを押してください . . .」と表示される pause
こうしておくとコマンド実行後放置しても実行中のログを逃すことがありません。
pause は便利なのですが、bat ファイルから bat ファイルを呼び出して連続実行する際に不便になる機能でもあります。というのも呼び出し先の bat ファイルの pause が走った瞬間にコマンドライン全体が一時停止し、次に実行したい処理に進めなくなってしまうためです。これを対処するには次の様にする方法があります。
rem call は bat ファイルから bat ファイルを呼び出すためのコマンド echo|call ffmpeg_alice.bat echo|call ffmpeg_bob.bat rem 呼び出し元の親 bat ファイルの終わりに pause で実行内容を確認 pause
echo とパイプで空の標準入力を bat ファイルに渡し、何かしらのキーを押した相応のことをします。これで元々の pause は実質無効化され次の処理に移れます。
このようにして bat ファイルの呼び出しを制御する bat ファイルを書くとより楽に様々なことができます。