【bat】pause が効かない/一瞬で閉じてしまうときの原因と対処法

バッチファイルの最後に pause を入れているのに、画面が一瞬で閉じてしまって内容が確認できないことがあります。
この現象は「pause が実行されていない」あるいは「pause の直前にエラーで終了している」ことが原因です。
本記事では、pause が効かない/画面がすぐ閉じるときの原因と対処法を整理します。

原因1:pause の前でエラー終了している

バッチ処理が途中でエラー終了すると、pause に到達する前にウィンドウが閉じてしまいます。
例えば存在しないコマンドを実行した場合などです。

@echo off
rem 存在しないコマンドを実行
not_a_command
pause

対策: エラーが出てもウィンドウを閉じないようにするには、cmd /k で実行するか、エラーを抑止する処理を追加します。

@echo off
not_a_command || echo エラーが発生しました
pause

原因2:ダブルクリックで直接実行している

エクスプローラからダブルクリックで .bat を実行すると、処理が終わった時点で cmd.exe が閉じます。
pause があっても、エラーや終了コードによっては表示される間もなく終了してしまうことがあります。

対策: コマンドプロンプトを開いた状態でバッチを実行すると、処理後も画面が残ります。

C:\> test.bat

またはショートカットを作成し、プロパティの「実行後に閉じない」設定を有効にする方法もあります。

原因3:pause が if や for のスコープ外で実行されていない

条件分岐やループ内で構文を誤ると、pause がスキップされてしまうことがあります。

@echo off
if exist file.txt (
  echo ファイルあり
) else (
  echo ファイルなし
)
pause

上記のように構文を正しく閉じていないと pause まで実行が到達しません。括弧の対応に注意しましょう。

原因4:pause がコメントアウトされている

rem:: でコメント化されて pause が効いていないケースもあります。

@echo off
:: pause

この場合は単純にコメントを外してください。

対策まとめ

  • エラー終了で pause に到達していない → エラー処理を入れる/cmd /k で実行
  • ダブルクリック直実行で閉じてしまう → コマンドプロンプトから実行
  • if / for のブロック構文エラー → 括弧の閉じ忘れを修正
  • pause をコメントアウトしている → コメントを外す

代替手段:最後に一時停止を強制する

最後まで確実に画面を止めたい場合は、pause の代わりに cmd /k を使って新しいウィンドウを開く方法もあります。

@echo off
rem メイン処理
dir C:\

rem 強制的に残す
cmd /k

これで処理が終わった後もウィンドウは閉じず、出力内容を確認できます。
ただし自動処理には向かないので、デバッグ用として使うと便利です。