コマンドについて詳しく解説します
ちょっと久しぶりにバッチファイルを触る機会があって、過去に勉強がてらに作ったバッチが良い感じに他用途に流用できたので、その部分を備忘録として共有しておきます。
頻繁にログなどを出力するバッチにて、ファイル名に日付と秒単位での時刻を入れたい場合に使える記述です。
ソース
@echo off echo %date% echo %time% set yyyy=%date:~0,4% set mm=%date:~5,2% set dd=%date:~8,2% set time2=%time: =0% set hh=%time2:~0,2% set mn=%time2:~3,2% set ss=%time2:~6,2% set filename=%yyyy%-%mm%%dd%-%hh%%mn%%ss% echo test >> log_%filename%.txt
処理の内容
内容は見てもらえればわかるレベルで、そんなに大したことはしていないと思っていますが一応紹介しておきますね。 必要部分だけ、切り取って使ってみてください。
日付(年・月・日)を取得
set yyyy=%date:~0,4% set mm=%date:~5,2% set dd=%date:~8,2%
%date% の環境変数を呼び出すと、「2014/09/30」という文字列のフォーマットで今日の日付を出力します。
この文字列をそれぞれ年・月・日の部分のみを切り取って新しく yyyy, mm, dd の変数に放り込む処理です。
時刻(時・分・秒)を取得
set time2=%time: =0% set hh=%time2:~0,2% set mn=%time2:~3,2% set ss=%time2:~6,2%
同じように、現在の時刻も環境変数 %date% から「11:55:05.23」というフォーマットで出力できます。
ただし、午前0時~午前9時の間は出力結果が「 0:55:06.53」(頭に半角スペース)を含めてしまうため、エラーになる可能性があるので初めの行の処理を加えることで「00:55:06.53」と、頭に0が代入されるようにしておきます。
ファイル名に日時の文字列を追加
set filename=%yyyy%-%mm%%dd%-%hh%%mn%%ss% echo test >> log_%filename%.txt
最後は単純に filename 変数に日付と時刻用に指定した変数を自分の好きなフォーマットで並べて文字列にしています。
echo testで適当な文字列を生成して、現在の日付・時刻を含んだログファイルを出力します。
出力されたファイル
ということで、上記記述で出力ファイル名を指定すると、こんな感じでログファイルが実行回数分だけ出力されます。
今回はただのテストでechoコマンドをファイルにリダイレクトしているだけですが、リダイレクトの方法を変えればどんなコマンドの出力結果も出力可能ですね。
サービスの稼働確認などをするバッチを作って、毎回日付と時間で別ファイルにログとして残しておく…ということができそうです。
まとめ
- 今日の日付は %date% 変数から取得
- 現在の地獄は %time% 変数から取得
- 上記2つの環境変数から日時の文字列を取得してファイル名に代入する
- どんな環境でも使用可能
僕自身はバッチはそんなにプロフェッショナルじゃないので、もっといい指定方法があるのかもしれないんですけど、とりあえず僕がかかわった環境ではこの方法で今までやれているので、特に問題ないんじゃないかなと思ってます。
とりあえず、動けばいいんすよ(暴論)