windows

cmdでYYYYMMDDhhmmssccと表示する方法

cmdでYYYYMMDD_hhmmssccなどと、区切り文字や記号ナシの日付形式で表示したいときは、結構めんどくさいです。

下記みたいな感じになります。

set YMD_mhsc_dammy=%DATE:/=%_%TIME:~,2%%TIME:~3,2%%TIME:~6,2%%TIME:~9,2%
set YMD_mhsc=%YMD_mhsc_dammy: =0%

これをそのまま使ってもらえれば、環境変数YMD_hmscにYYYYMMDD_hhmmssccの形で値が設定することができます。

以下、解説です。

使用する環境変数はDATEとTIME

使う環境変数は「%DATE%」と「%TIME%」です。

DATEはスラッシュが、TIMEはコロンとドットがついています。

C:\tmp>echo %DATE%
2021/01/12

C:\tmp>echo %TIME%
22:49:46.18

スラッシュ、コロン、ドット、とっても邪魔くさいです。ファイル名にそのまま使えないのでとても不便です。なので取り除いていきます。

環境変数を文字置き換え&切り出してくっつけ

どうやら、フォーマットみたいな便利なものは存在しないようですので、文字列を編集していくことにしましょう。

YYYYMMDDと表示させるには、/(スラッシュ)を除取り除いてあげればいいだけです。

%DATE:/=%

こうやったら取り除けます。

hhmmssccと表示させるためには、ちょっと面倒です。

  1. %TIME%の1~2文字目を切り出す
  2. %TIME%の4~5文字目を切り出す
  3. %TIME%の7~8文字目を切り出す
  4. %TIME%の10~11文字目を切り出す
%TIME:~,2%%TIME:~3,2%%TIME:~6,2%%TIME:~9,2%

無理やり感否めないですが、こうする以外の方法を思い浮かびませんでした。

もっといい方法をご存知でしたらtwitterで教えてください。

環境変数TIMEに入りうる空白を0埋めする

このTIME関数ですが、0時台に実行すると以下のような形で返ってきてしまいます。

C:\tmp>echo %TIME%
 0:21:35.26

空白が入ってしまっています。

このまま実行してしまうと、この環境変数を引数として渡した時に、2つの引数として認識してしまったりして動作しないので、空白を0埋めしてあげる必要があります

set YMD_mhsc_dammy=%TIME:~,2%%TIME:~3,2%%TIME:~6,2%%TIME:~9,2%
set YMD_mhsc=%YMD_mhsc_dammy: =0%

1行目はTIME関数を切り出してコロンを除いた環境変数「YMD_mhsc_dammy」を作成しています。

ただこのままだと空白が入りうるので、2行目で空白を0に置き換えています。

%YMD_mhsc_dammy: =0%

 

まとめ

といった感じで、YYYYMMDD_hhmmssccにするためには、

  1. 余計な記号を取り除く
  2. 空白を0に置き換える

と2段階踏む必要があり、いったんダミーの一時作業用の変数を用意しないとどうにもできないっぽいです。メンドクサイ…