【Windows】batファイルでエラーが起きた時だけウィンドウが画面に残り続ける様にする方法

 Windowsのバッチファイル(.bat)でエラーが発生した際のみウィンドウを閉じずに画面に残すようにする方法を紹介します。パパっと作ってすぐに実行が終わる様なコードでもエラーが起きた際は何が起こったか把握できないと修正は一気に難しくなります。batファイルをダブルクリックで実行すると実行終了時に自動でウィンドウが閉じます。これを pause で毎回止めてもいいのですが、何度も繰り返す実行内容だと毎回閉じるのが面倒です。エラーが起きた時だけ閉じる様にしたくなります。

 実際にエラーが起きた時だけ止まるコードは次です。

rem bat ファイル
@echo off
setlocal enabledelayedexpansion

rem ここにコマンドを書く
if !errorlevel! neq 0 (
    echo エラーが起きました
    pause
    exit /b
)

 このコードが単一のコマンドを実行する際のエラーハンドリングです。もし一つのバッチファイル内で複数のコマンドを実行するならば愚直にやると次の様になります。

rem bat ファイル
@echo off
setlocal enabledelayedexpansion

rem ここにコマンドを書く
if !errorlevel! neq 0 (
    echo エラーが起きました
    pause
    exit /b
)


rem ここにコマンドを書く
if !errorlevel! neq 0 (
    echo エラーが起きました
    pause
    exit /b
)

 正直、毎回 if 文の1セットをコピペするのは読む時の視認性に悪影響です。これを解決するならば次の様にサブルーチンを書く方法があります。

rem bat ファイル
@echo off
rem ここにコマンドを書く
setlocal enabledelayedexpansion

call :run_command "python --version"
call :run_command "コマンド2号"
call :run_command "php -v"

goto :eof

:run_command
    %~1
    if !errorlevel! neq 0 (
        echo エラーが起きました
        pause
        exit /b
    )
    goto :eof

 こうするとエラーハンドリングでラッピングされた状態でコマンドが実行されます。ただ、エスケープなどがめんどくさくもなります。複雑なスクリプトを書いている気がしてきたら、いっそもっとリッチな言語に移行してサブプロセスを操るコードを書いた方が良いやもしれません。スクリプトレベルのコード量ならば ChatGPT の助けを借りると移行が大変楽になります。実際に Python に翻訳した例が次のスクリーンショットです。

>株式会社シーポイントラボ

株式会社シーポイントラボ

TEL:053-543-9889
営業時間:9:00~18:00(月〜金)
住所:〒432-8003
   静岡県浜松市中央区和地山3-1-7
   浜松イノベーションキューブ 315
※ご来社の際はインターホンで「316」をお呼びください

CTR IMG