bat(バッチ)ファイルで実行結果をログに出力しませんか?
日時処理などでこけていた場合に、どこで失敗したか確認する時にログ出力は必須です。
また日時や時間を使用してログファイル名を変えたいと思った事はないでしょうか?
そんなエンジニアの悩みに、現役エンジニアの筆者が答えていきます。
windowsのプロンプトで使用できるbatやpythonやphpを使用して、業務効率化やWebサイトを作成しております。javaやシェルスクリプトなど、様々なプログラミングを行った実績ありの筆者です。
bat(バッチ)でログの出力方法
bat(バッチ)でログの出力方法の基本
bat(バッチ)でログの出力方法はリダイレクトを使用します。
echo 処理STEP1完了しました! >> log.log
「>」は上書き保存し「>>」は追記になります。
これでbatファイルと同階層にlog.logファイルが出力されます。
logファイルの中身を確認してみます。
処理STEP1完了しました!
batファイルでログの出力ができています。
ログに日付と時間を記入する
今度はログの内容に日付と時間を入れてみます。
batでもともと使用できる変数にdateやtimeというものがあり、それらを使用すれば簡単に日付と時間を取得する事が可能です。
batで変数を展開する時は前後に「%」をつけます。dateなら「%date%」となります。
echo %date% %time% 処理STEP1完了しました! >> log.log
logファイルの中身を確認してみます。
処理STEP1完了しました!
2024/02/25 15:08:46.56 処理STEP1完了しました!
先程のファイル内容に、日付と時間付きログが追加されているのがわかります。
ログのパスが絶対パスにて書かれている場合の注意点
ログ出力のパスは絶対パスで指定する事が決まっている環境もあると思います。そんな時にbatファイル流用しようとすればパスもいちいち修正しなければいけません。
そうならない為にもbatのパスを変数で指定しておきます。「%~dp0\」で取得することが可能です。
echo %date% %time% 処理STEP1完了しました! >> %~dp0\log.log
このbatファイルを実行します。
処理STEP1完了しました!
2024/02/25 15:08:46.56 処理STEP1完了しました!
2024/02/25 15:23:12.49 STEP1完了しました!
絶対パスでも同じ様に追記されています。
bat(バッチ)でログファイル名を日付や時間にして出力する
今度は日付や時間でログファイル名を変更したいと思いませんか?
そうすれば日付や時間ごとにログファイルを分ける事ができて、後から見やすくなります。
先程と同じように日付と時間を変数にて取得して、ログ出力してみます。
echo %date% %time% STEP1完了しました! >> %~dp0\%date%%time%log.log
このbatを実行します。
ファイル名、ディレクトリ名、またはボリューム ラベルの構文が間違っています。
エラーがでてログ出力できていません。
ログファイル名を日付や時間にするとエラーが起こる原因と対処法
batでログファイル名を日付や時間にするとエラーが起こる原因は、ファイル名につける事の出来ない文字が含まれているからです。先程のログ出力したファイルを見てみます。
処理STEP1完了しました!
2024/02/25 15:08:46.56 処理STEP1完了しました!
2024/02/25 15:23:12.49 STEP1完了しました!
dateで取得した日付の「/」が使用できません。timeでは「:」が使用できません。
ですので%date%と%time%で取得した、使用できない文字列を修正する必要があります。
修正したbatファイルが以下です。
set time1=%time::=%
echo %date% %time% STEP1完了しました! >> %~dp0\%date:/=%-%time1:~0,6%.log
時間の「:」を削除して変数「time1」にいれました。(set time1=%time::=%)
time1の最初の文字から6文字目までを取得するのが(%time1:~0,6%)
日付の「/」を削除するコマンドが(%date:/=%)
ではこの修正したbatファイルを実行して、ログ出力を行います。
batと同階層に「日付-時間6桁.log」ファイルが作成されて、中身に「日付 時間 STEP1完了しました!」とログ出力できています。
batでログ出力する時に使用してみてください。