2017-03-10 41 views
0

相當簡單我有這樣的腳本,讓我當前的時間並將其保存到一個文件:批次 - 領先的0對日,月

for /f %%x in ('wmic path win32_localtime get /format:list ^| findstr "="') do set %%x 
echo today=%Year%-%Month%-%Day% > env.properties 

唯一的問題是日期出來爲2017-3-9和我我不知道如何使它在月份和日期中添加領先的0,所以我得到這個代替2017-03-09

+1

改爲使用它。 'wmic OS獲取localdatetime/value'這會給你日期和時間,但是格式爲YYYYMMDDhhmmss – Squashman

回答

2

這會得到日期和時間,但也有你所有領域的前導零。你顯然可以使用一個SET命令來獲取你需要的值。

for /f "tokens=2 delims==" %%a in ('wmic OS Get localdatetime /value') do set "dt=%%a" 
set "YYYY=%dt:~0,4%" 
set "MM=%dt:~4,2%" 
set "DD=%dt:~6,2%" 
set "HH=%dt:~8,2%" 
set "Min=%dt:~10,2%" 
set "Sec=%dt:~12,2%" 
+1

只是對於任何人可能適用的注意事項:一旦你在各個組件上領先零,很難做數學運算(例如'set/a NEXTMONTH = MM + 1'),因爲set/a將前導零表示爲八進制,而08表示八進制無效。 – TripeHound

2

您可以使用wmic PATH Win32_LocalTime get檢索你想要的格式的日期,但你需要在你的for /F循環預先設置爲零,則。這裏是一個有效的解決方案:

for /F "delims=" %%Z in ('wmic PATH Win32_LocalTime get Day^,Month^,Year /FORMAT:LIST') do (
    for /F "tokens=1* delims==" %%X in ("%%Z") do set "%%X=0%%Y" 
) 
> "env.properties" echo today=%Year:~-4%-%Month:~-2%-%Day:~-2% 

除了定義選項字符串tokens1* delims==,改變賦值語句set和擴大在echo命令位所需的量,我改變了一些更多的東西:

  • 我僅檢索所需值DayMonthYear,因爲您的wmic命令行返回了許多其他不需要的值。
  • 而不是findstr "="來過濾出現的空行,我纏繞另一個for /F循環;實際上這些行不是空的,而是包含孤立的回車符,這是由於與for /F輸出的Unicode wmic的ANSI差對話導致的;實際上也是非空行包含結尾的回車符;第二個for /F循環擺脫了所有這些轉換假象。
  • 重定向語法已顛倒,以便不會將尾部SPACE寫入輸出文件env.properties

當然你也可以切換到命令行wmic OS get LocalDateTime作爲Squashmantheir answer建議,但我還是建議環繞另一個for /F環路避免上述轉換文物(雖然後回車字符做因爲你在這種情況下在整個字符串的開始處擴展子字符串):

for /F "delims=" %%Z in ('wmic OS get LocalDateTime /VALUE') do (
    for /F "tokens=1* delims==" %%X in ("%%Z") do set "DATETIME=%%Y" 
) 
> "env.properties" echo today=%DATETIME:~,4%-%DATETIME:~4,2%-%DATETIME:~6,2%