批处理文件日/月/年语法?

mta*_*lyn 5 windows command-line dos batch-file

我找不到用于提取当前日/月/年的批处理文件语法的简单细分.

我有以下语法来声明用作目录名的变量;

set folder=%date:~10,4%%date:~7,2%%date:~4,2%
Run Code Online (Sandbox Code Playgroud)

任何人都可以对波浪线,双重百分比意味着什么发光(或发布链接)?我似乎无法完全从直觉中解读它.

pax*_*blo 7

双重百分比绝对没有意义.它只是并排进行两次变量扩展的结果,例如:

echo %firstname%%lastname%
     \_________/\________/
      Two separate expansions.
Run Code Online (Sandbox Code Playgroud)

代字号为您提供子字符串.在您的情况下,%date:~10,4%date环境变量的偏移量10处给出四个字符(在这种情况下,年份可能是格式Thu 29/12/2011,偏移量从零开始).

如果你输入set /?一个Windows命令,它将为你解释所有的选项,包括使用负偏移从字符串末尾提取的漂亮技巧.

但是,您应该记住,date环境变量格式取决于区域设置,因此这种简单的字符串提取不太可能适用于所有国际版本的Windows(这几年前我就是这样).

更好的解决方案是使用WMI来获取日期组件,例如Rob van der Woude的优秀脚本页面,为了完整性而复制到此处:

FOR /F "skip=1 tokens=1-6" %%A IN ('WMIC Path Win32_LocalTime Get Dayˆ,Hourˆ,Minuteˆ,Monthˆ,Secondˆ,Year /Format:table') DO (
    IF NOT "%%~F"=="" (
        SET /A SortDate = 10000 * %%F + 100 * %%D + %%A
        SET /A SortTime = 10000 * %%B + 100 * %%C + %%E
        SET SortTime=0000000!SortTime!
        SET SortTime=!SortTime:~-6!
    )
)
Run Code Online (Sandbox Code Playgroud)