2014-09-03 156 views
0

我編寫了腳本來刪除臨時文件。 腳本創建日誌,刪除所有文件:CMD:將日期和時間保存爲文件名

和保存的東西在這個日誌我使用

SET RemoveLog=RemoveLog_%date:~-4,4%_%date:~-10,2%_%date:~-7,2%__%time:~0,2%_%time:~3,2%.txt(這將創建文件中像RemoveLog_2014_03_09__09_12.txt):

ECHO. >> %MEMLET%\%RemoveLog%(在這種情況下,空行)

這一直工作得很好,但在一臺筆記本電腦上發生了其他事情。

文件保存爲RemoveLog_2014_03_09__09_12.txt丟失)

不論我在腳本中使用>> %MEMLET%\%RemoveLog%,在日誌的每一行,我看到9_12.txt

爲什麼會這樣結束?

+0

筆記本電腦都有不同的日期格式 – 2014-09-03 08:07:26

+0

如何保存文件的日期,以便將工作無處不在? – Solver 2014-09-03 08:17:15

+1

我已經在這裏回答了一個非常類似的問題:http://stackoverflow.com/a/22813968/2152082 – Stephan 2014-09-03 08:22:55

回答

1

因爲%DATE%使用「短日期格式」的窗口設置返回當前日期,所以您沒有得到預期的結果。此設置完全(無休止地)可定製。

一個用戶可以配置其系統以顯示短日期爲Wed030914;而另一個用戶(即使在同一系統中)也可以選擇09/03/2014。這對於BAT程序員來說是一個完整的噩夢。

取而代之,一種可能的解決方案是使用WMIC。 WMIC是WMI的WMI命令行界面。 WMIWindows管理規範http://en.wikipedia.org/wiki/Windows_Management_Instrumentation

WMIC Path Win32_LocalTime Get Day,Hour,Minute,Month,Second,Year /Format:table 

回報的便捷方式直接與FOR解析它的日期。

完成解析,並把拼在一起

FOR /F "skip=1 tokens=1-6" %%A IN ('WMIC Path Win32_LocalTime Get Day^,Hour^,Minute^,Month^,Second^,Year ^| findstr /r /v "^$"') DO (
    SET REMOVELOG=RemoveLog_%%F_%%D_%%A_%%B_%%C.txt 
) 
+0

這將不會有一天,一個月,一小時,一分鐘,二秒的前導零。 – Stephan 2014-09-03 09:33:18

+0

它回答你的問題,避免%date%格式問題。你需要圍繞它構建你的解決方案。您也可以嘗試'WMIC OS get localdateTime' – 2014-09-03 11:23:59