Windowsのコマンドプロンプトやバッチファイル(batファイル)内のコマンドで「日付」を取得するシーンがあります。
たとえば、日付で処理を判断するためにとか、ログファイルのファイル名に日付を入れたいなどです。
コマンドプロンプト(バッチ)ではdate.exe というプログラムが用意されていて呼び出すと日付を取得できるのですが、このまま使えないシーン(後述します)が出てきます。
さて、日付を取得した後にどのようにして自分が使いたいように加工するか?
この記事では、コマンドプロンプト(バッチ)で日付を取得し加工するTipsを説明したいと思います。
簡単なので、是非見ていってください。
日付取得と同様に時刻を取得したい場合もあると思いますが別記事にしているのでそちらも合わせてどうぞ!
関連記事:Windowsコマンドプロンプトの時刻取得するtimeコマンドの使い方
※ 当記事のdateコマンドで得られる結果はYYYY/MM/DD形式が前提で説明しております。Windowsの環境によりYYYY-MM-DD などの場合は当記事の内容は使えません。
コマンドプロンプト(バッチ)で日付取得はdateコマンドを使う
早速ですが、コマンドプロンプト(バッチ)で日付を取得する方法をご案内します。
date
コマンドプロンプトでdateと打ってEnterを押してください。
現在の日付: 2018/09/10 新しい日付を入力してください: (年-月-日)
こんな感じで出てくるはずです。今回は何もしないので、更にEnterを押して抜けて下さい。
通常のdateコマンドは日付取得というよりは、Windowsの日付を変更するコマンドとなっています。
上記の文字列で日付部分を取得→加工 でも出来なくはないですが、制御がめんどくさいですよね。
dateコマンドを%で囲むと日付取得できる
では、dateコマンドで日付取得できる方法は?というと
echo %date%
- echo(エコー)は文字列をプロンプトに表示するコマンド
- %date% はdate.exeで出力された内容を文字列にする
上記コマンドを打ってEnterを押すと
2018/09/10
と、YYYY/MM/DD形式でシステム日付(当日)が表示されるはずです。(形式はWindowsの環境により異なりますが、何も変更してなければYYYY/MM/DD形式です)
%date% で日付が取得できます。
取得した内容を変数に格納したり、ファイルに書込んだりすれば良いわけです。
ここまではとても簡単ですよね。(以下一例です)
例:コマンド
echo %date% こんにちはと言いました。> c:\temp\test.log
- echo(エコー)は文字列をプロンプトに表示するコマンド
- %date% はdate.exeで出力された内容を文字列にする
- こんにちはと言いました という文字列を %date%の後に加える
- 「>」は、C:\temp\test.log に%date% こんにちはと言いました という文字列を上書きモードで出力する
関連記事:コマンドプロンプトやバッチで実行結果をファイルに出力する簡単な方法
例:コマンド結果(test.log の中身)
2018/09/10 こんにちはと言いました。
dateコマンドで得た値を加工する方法
では、dateコマンドで得た値(日付)を色々加工する方法をご案内します。
デフォルトはYYYY/MM/DD形式でしか取り出せないですが、日付は色んな使い方をすることがあると思うのです。
- 「年」だけを取り出したい
- 「月」だけを取り出したい
- 「日」だけを取り出したい
- YYYYMMDD(スラッシュを取り除いた状態)で使いたい
などなど。
dateコマンドは、以下内容を覚えておけば、年月日の一部分だけを取り出すことが出来ます。
これはバッチファイルでバッチを組んだ場合に良く使いますので覚えておきましょう。
date:~A,B で一部分を取り出せます
以下構文でdateコマンドで出力される内容(文字列)の一部分を取り出すことが出来ます。
echo %date:~A,B%
分かりにくいのでdate以下の詳細を。
date + ”:(コロン)”+”~(チルダ)”+(A:開始文字番号)+”,(カンマ)”+(B:取り出す文字数)
となっています。
開始文字番号は以下のように指定します。0番目から始まっていることに注意が必要です。
dateコマンドで返ってくる結果が「2018/09/10」であれば、
- 2→0番目(2018/09/10)
- 0→1番目(2018/09/10)
- 1→2番目(2018/09/10)
- 8→3番目(2018/09/10)
- /→4番目(2018/09/10)
- 0→5番目(2018/09/10)
- 9→6番目(2018/09/10)
- /→7番目(2018/09/10)
- 1→8番目(2018/09/10)
- 0→9番目(2018/09/10)
※太字部分が開始文字番号
※dateコマンドで得られる結果はYYYY/MM/DD HH:MM:SS ですが、時刻部分は今回は割愛しています。
となります。
一例を挙げると
2018/09 を取り出したい場合。
echo %date:~0,7%
となります。
dateコマンドで「年(YYYY)」だけ取り出したい
例:2018/09/10 で2018を取り出す
echo %date:~0,4%
とすると「2018」を得ることが出来ます。
dateコマンドで「月(MM)」だけ取り出したい
例:2018/09/10 で09を取り出す
echo %date:~5,2%
とすると「09」を得ることが出来ます。
dateコマンドで「日(DD)」だけ取り出したい
例:2018/09/10 で10を取り出す
echo %date:~8,2%
とすると「10」を得ることが出来ます。
dateコマンドでYYYYMMDDと加工する方法
さて、今までdateコマンドで得られる値を加工する方法を案内してきました。
これらを使えば、YYYYMMDD(日付のスラッシュなし)で加工することも勿論可能です。
スラッシュ無しで加工するシーンは色々考えられますが、ファイル名に日付を入れたい場合なんかが当てはまりますよね。(ファイル名にスラッシュは入れることが出来ないので。)
例:dateコマンドで得られた「2018/09/10」 を「20180910(YYYYMMDD)」に加工する
echo %date:~0,4%%date:~5,2%%date:~8,2%
となります。要は今まで出来てた内容を組み合わせただけで意外とシンプルです。
見た目はちょっと分かりにくいですが。
date:/= を使うとシンプルにYYYYMMDD形式になる
と、ここまでは色んなサイトを検索すれば出てくるのですが、YYYYMMDD形式に加工する場合に限りもう1つ方法があるのです。
しかも、コマンドが極めてシンプルになります。
論より実物を。
echo %date:/=%
簡単に解説すると、
dateコマンドで得られた結果から、「/(スラッシュ)」と「=(イコール:一致)」する文字列をカットするという内容になります。
実にシンプルですよね。
YYYYMMDD形式のdateコマンドは自分の環境で試してどちらかよい方を使いましょう
dateコマンドからYYYYMMDD形式を取得(加工)する方法は2つあることを説明してきました。
date:~A,B を使うか date:/= を使うかは実際に自分の環境で両方試していただき、動く方を採用すれば良いかと思います。
どっちも動くのであれば、date:/= がシンプルなのでおススメ。
dateコマンドを使い当日日付のログファイルを出力する(例)
最後にまとめとなりますが、dateコマンドを使った当日日付のログファイルを出力する一例をご紹介して当記事は終わります。
dateコマンド意外と使いますので、色々ためしてみて下さい!
dateコマンドで当日日付:YYYYMMDD(今回は2018/09/10)をファイル名(log20180910.txt)にしてログを出力する例
echo こんにちは、今日は良いお天気ですね > c:\temp\log%date:/=%.txt
関連記事:コマンドプロンプトやバッチで実行結果をファイルに出力する簡単な方法
ファイル(log20180910.txt)の中身
こんにちは、今日は良いお天気ですね