はじめに
バッチファイル内で日付を取得するには、%DATE% を使う方法が簡単ですが、この方法はPC(というかユーザー)の地域の設定によっては使えないケースがあります。
serverfault でロケールに関係なく日付を取得する方法がありましたのでまとめておきます。
地域設定に影響されない書き方
現在の日時をYYYYMMDDで取得しCUR_DATEに入れる例です。
for /f %%a in ('wmic os get LocalDateTime ^| findstr \\.') DO set LDT=%%a
set CUR_DATE=%LDT:~0,8%
(参考)日本語OSでは有効な書き方
日本語を前提とすればこの書き方でシンプルです。
set CUR_DATE=%DATE:~0,4%%DATE:~5,2%%DATE:~8,2%
説明
wmic os get LocalDateTime
でコンピュータの日時を取得することができます。
これはロケールに関係ない形式なので先頭から8文字を切り出すことで日付(YYYYMMDD)となります。
同様の方法で時刻も取り出すことができます。
実行例
実行例です。コマンドプロンプトで直接実行なので%%aではなく%aにしています。
C:\Users\xxxx>for /f %a in ('wmic os get LocalDateTime ^| findstr \\.') DO set LDT=%a
C:\Users\xxxx>set LDT=20180226185910.173000+540
C:\Users\xxxx>set CUR_DATE=%LDT:~0,8%
C:\Users\xxxx>set cur
CUR_DATE=20180226
C:\Users\xxxx>
参考
こちらを参考にさせてもらいました。
https://serverfault.com/questions/227345/locale-unaware-date-and-time-in-batch-files