バッチファイルでISO 8601っぽい表記で現在時刻を出力する

id:eel3:20131109:1383976213 に関連した一発ネタ。

バッチファイルで現在時刻をISO 8601っぽいフォーマットで出力してみる。

@echo off
:: とりあえず JST固定で
echo %DATE:/=-%T%TIME: =0%+09:00

ISO 8601では小数点として `,' と `.' のどちらもOKらしいけど、どちらが主流なのか気になる所だ。Wikipedia情報によるとコンマが推奨されているらしい。バッチファイルで一発で変換しようとするとピリオドになってしまう。

もう少し加工したい場合――基本表記で表示したいとか、小数以下を除きたいとか、小数点をコンマにしたいとか――環境変数の置換や部分文字列を駆使するよりもforを使ったほうが分かりやすいと思う。

@echo off
for /f "usebackq tokens=1-7 delims=/:." %%A in (`echo %DATE%/%TIME: =0%`) do (
    echo 基本表記  %%A%%B%%CT%%D%%E%%F+0900
    echo 拡張表記  %%A-%%B-%%CT%%D:%%E:%%F+09:00
    echo 拡張表記  %%A-%%B-%%CT%%D:%%E:%%F,%%G+09:00
)

ここでは組み立てた時刻表記をechoで表示させている。実際に使う場合は他の環境変数に格納してしまえばよいだろう。

しかしforを使っているのにループしない(1回しか実行されない)というのも少し微妙な気分だ。