Web
Analytics

社畜ゲートウェイ

京成・京急を中心に取り上げる阪急ファンのブログです。日本一遅い速報を届けます。

MENU

【スポンサーリンク】

【バッチファイル】ファイル名に日付・時間を指定してログ出力する方法

【スポンサーリンク】

f:id:neko_britannia:20200515220156j:plain

バッチファイルでログ出力する時に、ファイル名に日付や時間にしてログ出力したい時があると思います。そんなに難しくありませんので、サクッと作りましょう。

ファイル名に日付を指定する

まずは標準的なパターンから。ログファイルを出力する際に、YYYYMMDD.logと言ったファイル名にする方法です。

ECHO OFF

REM 年月日を変数YYYYMMDDに代入
SET YYYYMMDD=%date:~0,4%%date:~5,2%%date:~8,2%

REM ログファイル名用の変数LOG_FILEに、
REM 年月日を結合してログファイル名を作成
SET LOG_FILE=%YYYYMMDD%.log

REM ログファイルに「Hello world」を出力
ECHO Hello world > %LOG_FILE%

PAUSE

EXIT

このままバッチファイルにコピペして実行すると、実行日付のログファイルが出力されます。ログファイルの中身が「Hello world」ならOKです。

 

そんなに難しいことはやっていません。「date」コマンドでパソコンに設定されている日付を出力し、そこから必要な年月日を切り取っただけです。ちょっと年・月・日で分解するとこんな感じになります。

SET YYYY=%date:~0,4%
SET MM=%date:~5,2%
SET DD=%date:~8,2%
ECHO %YYYY%
ECHO %MM%
ECHO %DD%

PAUSE

これをコマンドプロンプトで実行してみると、次の様な結果になります。

f:id:neko_britannia:20200515224706j:plain

いきなり色々と詰め込むとパンクしてしまうかもなので、とりあえずコピペして使ってみて下さい。

 

ファイル名に日付と時間を指定する

先ほどは日付だけでしたが、今度は日付と時間を指定してYYYYMMDDHHMMSS.logと言ったファイル名にする方法です。

ECHO OFF

REM 年月日を変数YYYYMMDDに代入
SET YYYYMMDD=%date:~0,4%%date:~5,2%%date:~8,2%

REM 時分秒をゼロ埋めして、変数TEMP_TIMEに代入
SET TEMP_TIME=%time: =0%

REM 時分秒を変数HHMMSSに代入
SET HHMMSS=%TEMP_TIME:~0,2%%TEMP_TIME:~3,2%%TEMP_TIME:~6,2%
REM ログファイル名用の変数LOG_FILEに、 REM 年月日時分秒を結合してログファイル名を作成 SET LOG_FILE=%YYYYMMDD%%HHMMSS%.log REM ログファイルに「Hello world」を出力 ECHO Hello world > %LOG_FILE% PAUSE EXIT

これもコピペでOKです。実行すると、YYYYMMDDHHMMSS.logと言う名称のログファイルが出力されます。ログファイルの中身が「Hello world」OKです。

時間まで出力する際には少し工夫しています。コメントアウトにも記載していますが、時分秒のゼロ埋めです。結果だけ言うと、例えば、9時10分23秒に実行するときにHHのところをゼロ埋めしたログファイルが出力されます。

時分秒についてはゼロ埋めしないと半角スペースが入ってしまうので、色々と面倒なことになります。今回は説明を省きますが、まあこんなもんだと思ってコピペして使って下さい。

 

ログファイルに追記したい

さて、ログファイルに追記したい場合はどうすれば良いでしょうか。時分秒まで指定して出力すればファイル追記はほぼあり得ないと思いますが、ログファイルが日付だけの名称であれば、追記することは大いにあり得ます。例えば、日付名のみのログファイルの1行目に「Hello world」、2行目に「こんにちは」と続けて記載したい場合はこの様に記載します。

ECHO OFF

REM 年月日を変数YYYYMMDDに代入
SET YYYYMMDD=%date:~0,4%%date:~5,2%%date:~8,2%

REM ログファイル名用の変数LOG_FILEに、
REM 年月日を結合してログファイル名を作成
SET LOG_FILE=%YYYYMMDD%.log

REM ログファイルに「Hello world」を出力
ECHO Hello world >> %LOG_FILE%
ECHO こんにちは >> %LOG_FILE% PAUSE EXIT

いやいや、ほとんど変わらへんやん!と思うでしょうが、よーく目を凝らしてみて下さい。 

REM ログファイルに「Hello world」を出力
ECHO Hello world >> %LOG_FILE%
ECHO こんにちは >> %LOG_FILE%

何かちょっと変わってますね。標準出力のコマンドは同名のファイルがあると上書きしますが、このように「>>」としてあげるだけで追記してくれます。理屈はわからなくてOKなので、取りあえずコピペして使ってみて下さい。

 

編集後記

エンジニアが新人や若手の頃からバッチファイルを使ってると、年数経っても割と覚えていたり、ちょっと間が空いても調べればすぐできたりすることが多いので、早い段階から覚えておいた方が良いですね。ちょっと工夫すれば結構便利なこともありますし、運用・保守がメインの現場でも、バッチファイルが使えると、無駄な作業を削減出来たりするので、スキルアップにもつながります。

とは言え、いきなりは敷居が高いので、基本的にコピペOK、改変しやすいソースを紹介していこうかなと思います。