透過Windows BAT產生年月日時分秒格式化變數

有時候撰寫Windows Batch(BAT)批次檔案的時候,會需要yyyyMMddHHmmss這種年月日時分秒的變數,通常被拿來用在儲存LOG等記錄檔作為檔名用途,每次用到都要再找一次資料,乾脆寫在這邊記錄起來。

Windows BAT yyyyMMdd HHmmss變數產生語法

沒有甚麼秘訣,程式碼就在下方,透過for語法拆解日期與時間字串,執行過後就可以拿到變數:

@echo off

setlocal
for /f "usebackq tokens=1-3 delims=-" %%I IN (`echo %date%`) do set cDate=%%I%%J%%K
for /f "usebackq tokens=1-3 delims=:." %%I in (`echo %time%`) do set cTime=%%I%%J%%K
@echo The yyyyMMdd HHmmss is: %cDate%_%cTime%
endlocal

輸出結果:

The yyyyMMdd HHmmss is: 20231227_123459

拿到cDatecTime變數後,當然就可以套用到自己要運用的程式碼段落中啦!

最後需要特別注意的地方是,BAT已經是非常遠古DOS時期的語法,且運行的時候很吃執行期環境,上述的例子是在調整完Windows內建的日期時間格式為yyyyMMdd HH:mm:ss的狀態下才能順利擷取字串。儘管如此,同樣的語法在同樣的電腦同樣的身分下,如果由服務調用BAT運行起來仍然可能會失效,例如時間變回9:4:10 AM格式...。關於這點若要在BAT下寫複雜的判斷,StackOverflow有很多討論,程式碼行數保證多到你翻白眼。

所以我的良心建議是,適可而止就好。

Microsoft Windows Batch BAT DateTime Format yyyyMMdd HHmmss