批量 - 在日和月上领先0

时间:2017-03-10 14:47:55

标签: batch-file

相当简单我有这个脚本可以获取当前时间并将其保存到文件中:

for /f %%x in ('wmic path win32_localtime get /format:list ^| findstr "="') do set %%x
echo today=%Year%-%Month%-%Day% > env.properties

唯一的问题是日期是2017-3-9,我不确定如何将前导0添加到月份和日期,所以我得到了2017-03-09

2 个答案:

答案 0 :(得分:2)

这会获取日期和时间,但所有字段的前导零也是如此。显然,您只需使用一个SET命令即可获得所需的值。

for /f "tokens=2 delims==" %%a in ('wmic OS Get localdatetime /value') do set "dt=%%a"
set "YYYY=%dt:~0,4%"
set "MM=%dt:~4,2%"
set "DD=%dt:~6,2%"
set "HH=%dt:~8,2%"
set "Min=%dt:~10,2%"
set "Sec=%dt:~12,2%"

答案 1 :(得分:2)

您可以使用wmic PATH Win32_LocalTime get以您想要的格式检索日期,但您需要在for /F循环中添加零。这是一个有效的解决方案:

for /F "delims=" %%Z in ('wmic PATH Win32_LocalTime get Day^,Month^,Year /FORMAT:LIST') do (
    for /F "tokens=1* delims==" %%X in ("%%Z") do set "%%X=0%%Y"
)
> "env.properties" echo today=%Year:~-4%-%Month:~-2%-%Day:~-2%

除了定义选项字符串tokens1* delims==,更改赋值语句set并扩展echo命令中所需的位数之外,我还更改了一些内容:

  • 我仅检索所需的值DayMonthYear,因为您的wmic命令行返回了许多其他不需要的值。
  • 而不是findstr "="来过滤掉显示为空的行,而是围绕另一个for /F循环;实际上这些行不是空的,但包含孤立的回车字符,这是由于wmic输出的Unicode for /F与ANSI的对话不良造成的;实际上非空行也包含尾随回车符;第二个for /F循环消除了所有这些转换假象。
  • 重定向语法已被颠倒,以便不将尾部 SPACE 写入输出文件env.properties

当然您可以切换到Squashman中建议的their answer命令行wmic OS get LocalDateTime,但我仍然建议绕过另一个for /F循环以避免上述转换artefacts(尽管在这种情况下,在整个字符串的开头扩展子字符串时,尾部回车字符不会有害):

for /F "delims=" %%Z in ('wmic OS get LocalDateTime /VALUE') do (
    for /F "tokens=1* delims==" %%X in ("%%Z") do set "DATETIME=%%Y"
)
> "env.properties" echo today=%DATETIME:~,4%-%DATETIME:~4,2%-%DATETIME:~6,2%