大家好,又见面了,我是你们的朋友全栈君。
比如在windowscmd命令行窗口执行date命令后这个环境变量的值为
当前日期:2014-09-01 星期六 或2014/09/01 周六
那么如下的各个操作的意义如下: %date:~0,4% 表示从左向右指针向右偏0位,然后从指针偏移到的位置开始提取4位字符,结果是2014(年的值) %date:~5,2% 表示指针从左向右偏移5位,然后从偏移处开始提取2位字符,结果是03(月的值) %date:~8,2% 表示指针从左向右偏移8位,然后从偏移处开始提取2位字符,结果是01(日的值) %date:~5% 表示指针从左向右偏移5位,然后提取所有的值 %date:~-5% 表示指针反方向偏移,从最右端开始,偏移5位,然后从指针处提取左边的所有数值。
注意:“2014-09-01星期六”是个字符串,在计算机里指针是从0开始计数的,所以这串字符的指针意义上的第5位是0,月份的0,取两位刚好是03.
同理,比如当前系统的time变量的值如下:
当前时间: 11:36:56.63
那么如下的各个操作的意义如下: %time:~0,2% 表示从左向右指针向右偏0位,然后从指针偏移到的位置开始提取2位字符,结果是小时字段数值 %time:~3,2% 表示指针从左向右偏移3位,然后从偏移处开始提取2位字符,结果是分钟字段数值 %time:~6,2% 表示指针从左向右偏移6位,然后从偏移处开始提取2位字符,结果是秒字段数值
//创建时间命名的文件夹
md d:\%date:~0,4%%date:~5,2%%date:~8,2%_%time:~0,2%%time:~3,2%%time:~6,2%
——–分析————
从set /?中提取的有关帮助:
%PATH:str1=str2% 会扩展 PATH 环境变量,用 “str2” 代替扩展结果中的每个 “str1″。 要有效地从扩展结果中删除所有的 “str1″,”str2” 可以是空的。 “str1″ 可以以星号打头;在这种情况下,”str1” 会从扩展结果的 开始到 str1 剩余部分第一次出现的地方,都一直保持相配。
也可以为扩展名指定子字符串。 %PATH:~10,5% 会扩展 PATH 环境变量,然后只使用在扩展结果中从第 11 个(偏 移量 10)字符开始的五个字符。如果没有指定长度,则采用默认 值,即变量数值的余数。如果两个数字(偏移量和长度)都是负数, 使用的数字则是环境变量数值长度加上指定的偏移量或长度。 %PATH:~-10% 会提取 PATH 变量的最后十个字符。 %PATH:~0,-2% 会提取 PATH 变量的所有字符,除了最后两个。
———————————-
用%time:~0,2%%time:~3,2%%time:~6,2%时有个问题, 就是如果TIME 是00点的时候,电脑显示的是0 不是00所以TIME 0~2 就报错了。
例子:时间9:42:17
set fileDate=%date:~0,4%%date:~5,2%%date:~8,2%%time:~0,2%%time:~3,2%%time:~6,2%
for /f “tokens=1,2 delims=:” %%i in (‘time/t’) do set t=%%i%%j
set fileDate2=%date:~0,4%%date:~5,2%%date:~8,2%%t:~0,4%%time:~6,2%
echo fileDate:%fileDate%
echo fileDate2:%fileDate2%
fileDate:20150112 94217(9前面是空格) fileDate2:20150112094217
还有些设备的date显示是12/12/2015 周一
所以用以下方法格式化
set date=%date:~0,10% set date=%date:-=% //去掉日期中的- set date=%date:/=% //去掉日期中的/ set time=%time:~0,8% set time=%time::=% //去掉时间中的:
if “%time:~0,1%”==” ” set “time=0%time:~1%”
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/191231.html原文链接:https://javaforall.cn