バッチファイルで処理をした時に、処理の経過を確認するために標準出力にメッセージを表示することがよくあります。
それ自体はECHOで簡単に出来るのでよいのですが、何かエラーが出た時にどこまで終わったのかを確認するために同時にログファイルへ情報を書き込む必要が出てくる場合があります。
そっちもECHOで出力先をファイルにリダイレクトしてあげればよいのですが、これをひとつのECHOで行うことは出来ません。○nix系のシェルであればteeを使ったりすれば解決出来ますが、Windowsのバッチはいい方法がありません。
これを解決する方法をちょっと考えてみました。
@ECHO OFF SET FDATE=%date:~2,10% SET FTIME=%time:~0,-6% SET LOGFILE="%~dp0Create%FDATE:/=-%_%FTIME::=.%.log" :// ログファイルの初期化 ECHO ■ 処理開始 [実行者:%USERNAME% %DATE% %TIME%] > %LOGFILE% ECHO. >> %LOGFILE% :// 普通の使い方 CALL :ECHO_D 1. ○○処理 CALL :ECHO_D . DIR C:\ >> %LOGFILE% CALL :ECHO_D . :// どこまで長いのに耐えられるかテスト CALL :ECHO_D ITOTTO 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 CALL :ECHO_D . :// 結果表示 NOTEPAD %LOGFILE% PAUSE EXIT :ECHO_D IF "%*"=="." ( ECHO. ECHO. >> %LOGFILE% ) ELSE ( ECHO %* ECHO %* >> %LOGFILE% )
バッチファイルのEXIT以降に一つラベルを作って(上の例だと:ECHO_D)、そこを引数付でCALLすることで処理を実現しています。
何はともあれ実行してみます。
1. バッチファイルを実行すると....
2. ログファイルを確認すると....
どちらにも同じ結果が出ています。とりあえず意図したことは出来ているようです。
本来はコマンドを実行した結果もこのように表示出来ればよいのですが、それについてはまだよい案が思いつきません。