Windows Bat脚本问题收录
%time:~0,2% 无效的参数数量 批处理中%time:~0,2%返回小时补零
一般运行bat脚本动态设置时间用如下语句:
set dateStr=%date:~0,4%%date:~5,2%%date:~8,2%%time:~0,2%%time:~3,2%%time:~6,2%
各个操作的意义如下:
%time:~0,2%
表示从左向右指针向右偏0位,然后从指针偏移到的位置开始提取2位字符,结果是小时字段数值
%time:~3,2%
表示指针从左向右偏移3位,然后从偏移处开始提取2位字符,结果是分钟字段数值
%time:~6,2%
表示指针从左向右偏移6位,然后从偏移处开始提取2位字符,结果是秒字段数值
导致脚本无法正常运行的语句如下:
%time:~0,2%%time:~3,2%%time:~6,2%
就是如果time 是00点 ~ 09点的时候命令截取出来前面0掉了,所以%time:~0,2%
就会在命令中产生一个空格导致命令执行报错了,一般报错:无效的参数数量
例子:2021-08-10_09:35:55
set dataStr=%date:~0,4%-%date:~5,2%-%date:~8,2%_%time:~0,2%%time:~3,2%%time:~6,2%
set dataStr2=%date:~0,4%-%date:~5,2%-%date:~8,2%_%time:~1,1%%time:~3,2%%time:~6,2%
echo dataStr:===>%dataStr%
echo dataStr2:===>%dataStr2%
dataStr:===>2021-08-10_ 93555
dataStr2:===>2021-08-10_93555
注:dataStr_后面有个空格,导致dos会以为是两个参数
总结:
1)如果要用%time:~0,2%%time:~3,2%%time:~6,2%
(运行脚本的时间一定是在10-23点区间,否则0-9(H)脚本调用函数错误,无法运行)
2)如果要用%time:~1,1%%time:~3,2%%time:~6,2%
(建议运行脚本的时间在0-9点这个区间,如果是>9点,比如13点,但是会造成只显示个位数字3,比如2019-1-20 时间13:26:20 会显示2019012032620 从而影响时间的整体准确性
解决方案:批处理中%time:~0,2%返回小时补零即可
if %time:~0,2% leq 9 (set hour=0%time:~1,1%) else (set hour=%time:~0,2%)
set dataStr=%date:0,4%-%date:5,2%-%date:8,2%_%hour%%time:3,2%%time:~6,2%