我写了脚本来删除临时文件。 脚本创建日志并删除所有文件:
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 :(得分:1)
由于%DATE%
使用"短日期格式"的窗口设置返回当前日期,因此您无法获得预期效果。此设置完全(无限)可自定义。
一个用户可以将其系统配置为将短日期显示为Wed030914
;而另一个用户(即使在同一系统中)可以选择09/03/2014
。对于BAT程序员来说,这是一场彻底的噩梦。
一种可能的解决方案是使用 WMIC 。 WMIC是WMI的WMI命令行界面。 WMI Windows Management Instrumentation 是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
)