記事内に広告が含まれています。

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

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

【スポンサーリンク】

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

まずは標準的なパターンから。ログファイルを出力する際に、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、改変しやすいソースを紹介していこうかなと思います。

.