我找不到用于提取当前日/月/年的批处理文件语法的简单细分。
我有以下语法来声明用作目录名的变量;
set folder=%date:~10,4%%date:~7,2%%date:~4,2%
任何人都可以对波浪线,双重百分比意味着什么发光(或发布链接)?我似乎无法完全从直觉中解读它。
答案 0 :(得分:7)
双倍百分比绝对没有意义。它只是并排进行两次变量扩展的结果,例如:
echo %firstname%%lastname%
\_________/\________/
Two separate expansions.
波浪号给你一个子串。在您的情况下,%date:~10,4%
会在date
环境变量的偏移量10处给出四个字符(在这种情况下为年份,因为格式可能为Thu 29/12/2011
,偏移量从零开始)。< / p>
如果您在Windows命令代码中输入set /?
,它将为您解释所有选项,包括使用负偏移量从字符串的 end 中提取的漂亮技巧。
但是,您应该记住,date
环境变量格式取决于区域设置,因此这种简单的字符串提取不太可能适用于所有国际版本的Windows(这几年前我就是这样)。
更好的解决方案是使用WMI获取日期组件,例如Rob van der Woude's excellent scripting pages,复制到此为完整性:
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!
)
)
答案 1 :(得分:2)
〜和%% s正在分割字符串(如果你只是在命令中键入日期,它会显示完整的字符串)。
%date:~10,4%表示从第10个字符开始接下来的4个字符。
还要注意使用不同区域设置的不同PC,因为它们会更改字符串中这些字符的顺序。
答案 2 :(得分:2)
@paxdiablo打败了我。这是一个link to a site that explains how it works,有很多例子。