バッチファイルの最後に 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
これで処理が終わった後もウィンドウは閉じず、出力内容を確認できます。
ただし自動処理には向かないので、デバッグ用として使うと便利です。