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)
我尝试在批处理脚本中将日期输入上述变量,但目前日期为
2011/04/
有关如何解决此问题的任何建议吗?
答案 0 :(得分:17)
由于%DATE%
使用“短日期格式”的窗口设置返回当前日期,因此无法获得预期效果。此设置完全(无限)可自定义。
一个用户可以将其系统配置为将短日期显示为Fri040811;而另一个用户(即使在同一系统中)可能会选择08/04/2011。对于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 /Format:table') DO (
SET /A TODAY=%%F*10000+%%D*100+%%A
)
答案 1 :(得分: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 ======================================================================
当然,您可以使用生成的字符串格式。
答案 2 :(得分:3)
我认为这就是你想要的东西
@echo off
:MENU
CLS
for /f "delims=" %%a in ('wmic OS Get localdatetime ^| find "."') do set xsukax=%%a
echo Year=%xsukax:~0,4%
echo Month=%xsukax:~4,2%
echo Day=%xsukax:~6,2%
echo hour=%xsukax:~8,2%
echo Minutes=%xsukax:~10,2%
echo seconds=%xsukax:~12,2%
pause
goto MENU
答案 3 :(得分:2)
这是我在XP专业版机器中使用的更高版本。 XP Home没有wmic。
:: timestamp YYYYMMDD_HHMMSS
@echo off
for /f "delims=" %%a in ('wmic OS Get localdatetime ^| find "."') do set dt=%%a
set dt=%dt:~0,8%_%dt:~8,6%
echo %dt%
pause
和另一个
:: timestamp YYYY-MM-DD_HH-MM-SS
@echo off
for /f "delims=" %%a in ('wmic OS Get localdatetime ^| find "."') do set dt=%%a
set dt=%dt:~0,4%-%dt:~4,2%-%dt:~6,2%_%dt:~8,2%-%dt:~10,2%-%dt:~12,2%
echo %dt%
pause
答案 4 :(得分:1)
随意以任何方式使用
:: Date in year, day, month format
FOR /f "tokens=2-4 skip=1 delims=(-)" %%G IN ('echo.^|date') DO (
FOR /f "tokens=2 delims= " %%A IN ('date /t') DO (
SET v_first=%%G
SET v_second=%%H
SET v_third=%%I
SET v_all=%%A
)
)
SET %v_first%=%v_all:~0,2%
SET %v_second%=%v_all:~3,2%
SET %v_third%=%v_all:~6,4%
SET DATE2= %MM%_%DD%_%YY%
ECHO. The date is: %DATE2%
答案 5 :(得分:0)
难道你不能简单地使用以下1行来创建你的var(使用任何var名称)吗?
set ymd=%date:~6,4%/%date:~0,2%/%date:~3,2%
答案 6 :(得分:0)
for /f %%a in ('wmic os get localdatetime ^| find "."') do set dts=%%a
set ymd=%dts:~0,8%
set hour=%dts:~8,6%
答案 7 :(得分:0)
以下脚本将以真实的ISO8601和人类格式(无'T')提供带有时区(TZ)信息的本地时间。它将以分钟为单位的TZ偏移量转换为所需的HHMM格式,例如2019-01-25T08:26:55.347+1300
和2019-01-25 08:26:55.347+1300
对于具有DST的新西兰。
@echo off
for /F "usebackq tokens=1,2 delims==" %%i in (`wmic os get LocalDateTime /VALUE 2^>NUL`) do if '.%%i.'=='.LocalDateTime.' set ldt=%%j
set ccyy_mm_dd=%ldt:~0,4%-%ldt:~4,2%-%ldt:~6,2%
set hh_mm_ss=%ldt:~8,2%:%ldt:~10,2%:%ldt:~12,2%
set _fff=%ldt:~14,4%
set tzsign=%ldt:~21,1%
set tzmins=%ldt:~22%
set /a tzHH=(%tzmins%/60)
set /a tzMM=(%tzmins%-(%tzHH%*60))
set /a tzHH=100 + %tzHH%
set tzHH=%tzHH:~1,2%
set /a tzMM=100 + %tzMM%
set tzMM=%tzMM:~1,2%
set ldt=%ccyy_mm_dd% %hh_mm_ss%%_fff%%tzsign%%tzHH%%tzMM%
set ldt8601=%ccyy_mm_dd%T%hh_mm_ss%%_fff%%tzsign%%tzHH%%tzMM%
echo %ldt%
echo %ldt8601%
您可能要删除其中一个echo命令
EDIT (对于那些想要在TZ中冒号的人),将%tzHH%%tzMM%
更改为%tzHH%:%tzMM%