你在这里看到了个人如今的时间是01:15,没错正在作个开发,原本好好的,结果一运行,直接报错:windows
这里就是时间中的获取小时出了问题,以前23点那会已经调试经过了,过那时是没有问题的,那么这时发生了什么?为什么中间会多了一个空格?编码
在系统cmd中提取时间:spa
能够看到小时前面仍是有空格,那么是编码问题chcp 65001 改到 chcp 936 同样仍是。.net
最后,想到可能这里的时间是个位数?试试命令行
for /l %i in (0,1,9) do ( if %time:~0,2%==%i echo 0%i ) 01
果真这样就对了3d
还有就是,个人bat文件要能够在中文,和英文系统上提取时间,在chcp 65001 下提取的时间格式是不一样的,那么如何能正确提取呢? 指针
思路一:调试
cmd判断系统的语言,code
systeminfo输出的中虽然有zh-cn 可是中英文都是同样,排除blog
采用dxdiag输出文件后有具体的语言,但是每当执行到这里时,这两个命令都会等好一会时间,并且执行dxdiag命令后,检测生成的文件还会提示文件不存,但实际上是有输出的。排除
思路二:
既然系统提取的时间不一样那么直接根据不一样来判断,不一样主要是在提取的时间有没有/,通常正常提取后是:20181022 错误的是 2018/10/22
set dateTime=%date:~10,4%%date:~4,2%%date:~7,2%_%hour%%time:~3,2%%time:~6,2%%time:~9,2% echo %dateTime% |find "/" && set dateTime=%date:~3,4%%date:~8,2%%date:~11,2%_%hour%%time:~3,2%%time:~6,2%%time:~9,2%
这样咱们就能够提取正确的时格式,又能够判断系统的语言了。
若是想要获取系统语言:
dism /online /get-intl
cmd时间格式参考:
参考:原文:https://blog.csdn.net/jinhoward/article/details/20213213
好比在windowscmd命令行窗口执行date命令后这个环境变量的值为
那么以下的各个操做的意义以下:
%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-03-01 星期六”是个字符串,在计算机里指针是从0开始计数的,因此这串字符的指针意义上的第5位是0,月份的0,取两位恰好是03.
同理,好比当前系统的time变量的值以下:
那么以下的各个操做的意义以下:%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%