批处理脚本日期变为变量

Jim*_*ies 5 variables batch-file

for /F "tokens=1-4 delims=/ " %%i in ('date /t') do (
set Day=%%k
set Month=%%j
set Year=%%l
set DATE=%%k/%%j/%%l)
Run Code Online (Sandbox Code Playgroud)

我试着在批处理脚本中将日期输入上述变量,但是目前日期是

2011/04/
Run Code Online (Sandbox Code Playgroud)

对于如何解决这个问题,有任何的建议吗?

PA.*_*PA. 17

您没有得到预期的结果,因为%DATE%使用"短日期格式"的窗口设置返回当前日期.此设置完全(无限)可自定义.

一个用户可以将其系统配置为将短日期显示为Fri040811; 而另一个用户(即使在同一系统中)可能会选择08/04/2011.对于BAT程序员来说,这是一场彻底的噩梦.

一种可能的解决方案是使用WMIC.WMIC是WMI的WMI命令行界面.WMI Windows Management Instrumentationhttp://en.wikipedia.org/wiki/Windows_Management_Instrumentation

WMIC Path Win32_LocalTime Get Day,Hour,Minute,Month,Second,Year /Format:table
Run Code Online (Sandbox Code Playgroud)

以方便的方式返回日期,直接用a解析它FOR.

完成解析并将各个部分组合在一起

 FOR /F "skip=1 tokens=1-6" %%A IN ('WMIC Path Win32_LocalTime Get Day^,Hour^,Minute^,Month^,Second^,Year /Format:table') DO (
    SET /A TODAY=%%F*10000+%%D*100+%%A
 )
Run Code Online (Sandbox Code Playgroud)


Kee*_*ees 6

我从已经给出的解决方案中得到了最短的结果.这适用于每个系统(XP Pro及更高版本):

REM ===================================================================
REM CREATE UNIQUE DATETIME STRING IN FORMAT YYYYMMDD-HHMMSS
REM ======================================================================
FOR /f %%a IN ('WMIC OS GET LocalDateTime ^| FIND "."') DO SET DTS=%%a
SET DateTime=%DTS:~0,8%-%DTS:~8,6%
REM ======================================================================
Run Code Online (Sandbox Code Playgroud)

当然,您可以使用生成的字符串格式.