如何以可预测的格式获取批处理文件中的日期?

Ang*_*ker 20 windows-7 date windows-xp batch-file

在批处理文件中,我需要从 date 命令中提取月、日、年。所以我使用了以下内容,它本质上解析 Date 命令以将其子字符串提取到一个变量中:

set Day=%Date:~3,2%
set Mth=%Date:~0,2%
set Yr=%Date:~6,4%
Run Code Online (Sandbox Code Playgroud)

这一切都很棒,但是如果我将此批处理文件部署到具有不同区域/国家/地区设置的机器上,则会失败,因为月、日和年位于不同的位置。

无论日期格式如何,如何提取月、日和年?

and*_*415 18

Windows XP 及更高版本

获取日期命令

@echo off
for /f "tokens=2 delims==" %%G in ('wmic os get localdatetime /value') do set datetime=%%G

set year=%datetime:~0,4%
set month=%datetime:~4,2%
set day=%datetime:~6,2%

echo %year%/%month%/%day%
Run Code Online (Sandbox Code Playgroud)

输出

在此处输入图片说明

  • +1最简洁的答案。我还建议以“ECHO %year%-%month%-%day%”结尾,这是 ISO 和文件系统兼容的格式(更不用说按年月日自动排序)。 :-)。 (2认同)

Tex*_*Hex 16

来源:http : //ss64.com/nt/syntax-getdate.html

方法二(单cmd)

获取日期命令

@Echo off
:: Check WMIC is available
WMIC.EXE Alias /? >NUL 2>&1 || GOTO s_error

:: Use WMIC to retrieve date and time
FOR /F "skip=1 tokens=1-6" %%G IN ('WMIC Path Win32_LocalTime Get Day^,Hour^,Minute^,Month^,Second^,Year /Format:table') DO (
   IF "%%~L"=="" goto s_done
      Set _yyyy=%%L
      Set _mm=00%%J
      Set _dd=00%%G
      Set _hour=00%%H
      SET _minute=00%%I
)
:s_done

:: Pad digits with leading zeros
      Set _mm=%_mm:~-2%
      Set _dd=%_dd:~-2%
      Set _hour=%_hour:~-2%
      Set _minute=%_minute:~-2%

:: Display the date/time in ISO 8601 format:
Set _isodate=%_yyyy%-%_mm%-%_dd% %_hour%:%_minute%
Echo %_isodate%
pause
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明


方法一(cmd+vb)

获取日期命令

@Echo off
For /f %%G in ('cscript /nologo getdate.vbs') do set _dtm=%%G
Set _yyyy=%_dtm:~0,4%
Set _mm=%_dtm:~4,2%
Set _dd=%_dtm:~6,2%
Set _hh=%_dtm:~8,2%
Set _nn=%_dtm:~10,2%
Echo %_yyyy%-%_mm%-%_dd%T%_hh%:%_nn%
Run Code Online (Sandbox Code Playgroud)

获取日期.vbs

Dim dt
dt=now
'output format: yyyymmddHHnn
wscript.echo ((year(dt)*100 + month(dt))*100 + day(dt))*10000 + hour(dt)*100 + minute(dt)
Run Code Online (Sandbox Code Playgroud)