バッチファイルで各種設定を自動化したとき、ちゃんとエラーなく終わったかどうかを確認する方法として、ログファイルの作成方法をご紹介します。
細かい内容は置いといてログ出力の方法コマンドだけ知りたい方は目次からまとめに飛んで下さい。
ログファイルの設定
setコマンドを使ってログファイル名を指定します。
今回は「実行しているバッチファイルのカレントフォルダ\log\PC名.log」となるように指定します。
PC名は環境変数の「%COMPUTERNAME%」を使えるので
1 |
SET BAT_LOG=%~dp0log\%COMPUTERNAME%.log |
これでログを残したい部分で「BAT_LOG」を指定すればログを作成できます。
ログ出力方法
ログファイルに出力する方法は上書きと追記の2種類があります。
追記出力
追記出力には「>>」を使います。
例
1 2 3 4 5 6 |
@echo off SET BAT_LOG=%~dp0log\%COMPUTERNAME%.log echo 追記出力でログ出力します。 > %BAT_LOG% Pause Exit |
追記出力は既にファイルが存在する場合、一番最後の行から追記していきます。
なので上記ファイルを2回実行した場合、既に作成されているログの続きから出力されるので、ログファイルには「追記出力でログ出力します。」が2行記載された内容になります。
上書き出力
上書き出力には「>」を使います。
例
1 2 3 4 5 6 |
@echo off SET BAT_LOG=%~dp0log\%COMPUTERNAME%.log echo 上書き出力でログ出力します。 > %BAT_LOG% Pause Exit |
上書き出力の方法でログを出力した場合、それ以前にあったログの内容は破棄されて現在の出力が上書きされます。
なので上記ファイルを2回実行した場合、既に作成されているログの内容は破棄されるので、ログファイルには「上書き出力でログ出力します。」が1行記載された内容になります。
以前に実行したログに上書きする形でログを取得する場合は、この上書き出力を使用しますが、下記のように使ってしまうとログを残せなくなってしまうので注意して下さい。
1 2 3 4 5 6 7 8 |
@echo off SET BAT_LOG=%~dp0log\%COMPUTERNAME%.log echo ログ一覧を取得します。 > %BAT_LOG% dir %~dp0log\ > %BAT_LOG% echo 完了です。 > %BAT_LOG% Pause Exit |
この場合ログ出力を全て上書きで出力しているので、ログファイルの内容は「完了です。」の1行のみになります。
前のファイルに上書きで、今回のログを出力する場合は
最初だけ上書き出力し、2つ目からは追記出力でログ出力を行います。
1 2 3 4 5 6 7 8 |
@echo off SET BAT_LOG=%~dp0log\%COMPUTERNAME%.log echo ログ一覧を取得します。 > %BAT_LOG% dir %~dp0log\ >> %BAT_LOG% echo 完了です。 >> %BAT_LOG% Pause Exit |
これでログ一覧をログに残せるように出力できます。
エラー出力
上記の方法は標準出力をファイルへ出力する方法です。
エラーメッセージはエラー出力に出力されるので、この方法だとエラーメッセージは出力されません。
エラー出力を出力するには「2>」を使います。
1 2 3 4 5 6 |
@echo off SET BAT_LOG=%~dp0log\%COMPUTERNAME%.log dir %~dp0*.exe 2> %BAT_LOG% Pause Exit |
こうするとエラー出力がファイルに出力されるので、ファイルの内容は「ファイルが見つかりません」となります。
しかし、これだと標準出力はファイルに出力されなくなってしまうので、どちらも出力するには「2>&1」を使います。
1 2 3 4 5 6 7 |
@echo off SET BAT_LOG=%~dp0log\%COMPUTERNAME%.log dir %~dp0*.exe > %BAT_LOG% 2>&1 echo 標準出力とエラー出力が表示されます。 >> %BAT_LOG% 2>&1 Pause Exit |
2>&1は「標準エラー出力(2)を標準出力に出力する(&1)」という意味です。
なのでこれで標準出力とエラー出力の両方をファイルへ出力できます。
ログが存在する場合にエラーにする方法
すでにバッチを実行済みでログがある場合、2回目を流すことなくエラーでバッチを止めたい場合はこの方法を使います。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
@echo off SET BAT_LOG=%~dp0log\%COMPUTERNAME%.log IF EXIST %BAT_LOG% ( echo 既にログファイルが存在します。 echo 処理を中断します。 Pause Exit ) echo 処理を開始します。 > %BAT_LOG% Pause Exit |
「IF EXIST」は指定のファイルが存在する場合コマンドを実行します。
このコマンドでログがる場合は「Exit」で処理から抜けるか、「goto」でエラー処理用のラベルに飛ぶことで中断させることができます。
まとめ
以上のログ取得方法を表にまとめるとこうなります。
コマンド > ファイルパス | 標準出力をファイルへ上書き出力 |
コマンド >> ファイルパス | 標準出力をファイルへ追記出力 |
コマンド 2> ファイルパス | 標準エラー出力をファイルへ上書き出力 |
コマンド 2>> ファイルパス | 標準エラー出力をファイルへ追記出力 |
コマンド > ファイルパス 2>&1 | 標準出力と標準エラー出力をファイルへ上書き出力 |
コマンド >> ファイルパス 2>&1 | 標準出力と標準エラー出力をファイルへ追記出力 |
以上です。
コメントを残す