一、背景
有一个批处理脚本,脚本中根据当前日期,动态的生成日志文件,
如:当前是 06月20日,我希望生成的日志文件名为:XX_0620.log
二、获取日期和时间
Windows 在批处理中 获取日期和时间的方式如下:
C:\Users\cyinl>echo "%date%""/06/20 周一"C:\Users\cyinl>echo "%time%""09:47:34.41"
echo %time%
输出的时间格式:HH:MM:SS.NN
HH
:时
MM
:分
SS
:秒
NN
:厘秒(注意不是毫秒,1秒=10分秒=100厘秒=1000毫秒)
三、日期时间格式化处理
Windows 在批处理中对日期时间格式化的处理,其实就是对字符串的处理。
%date%、%time% 都是字符串,只需对两者进行截取再拼接为需要的格式即可。
1. 字符串截取
语法:目标字符串=%源字符串:~起始位置,截取长度%
C:\Users\cyinl>echo %date%/06/20 周二C:\Users\cyinl>echo %date:~0,4%C:\Users\cyinl>echo %date:~5,2%06C:\Users\cyinl>echo %date:~8,2%20C:\Users\cyinl>echo %date:~-2%周一C:\Users\cyinl>echo %date:~0,-2%/06/20C:\Users\cyinl>echo %date:~-8,3%06/C:\Users\cyinl>echo %date:~-8,-3%06/20C:\Users\cyinl>echo %date:~4%/06/20 周一C:\Users\cyinl>echo %date:~,4%C:\Users\cyinl>echo %date:~4,%ECHO 处于打开状态。
起始位置:
1)起始值为 正,表示正着数,如:%date:~5,2%
,表示从正着数第5个字符,往后截取2个字符(不含第5个字符);
2)起始值为 负,表示倒着数,如:%date:~-8,3%
,表示从倒着数第8个字符,往后截取3个字符(含第8个字符);
3)起始值为0或空,表示从最左边开始,如:%date:~,4%
,%date:~0,4%
都表示从左边起始位置,截取2个字符;
(起始位置如果省略,必需有个逗号占位,如果逗号省略则表示【截止长度为空】)截止长度(偏移量):
1)截止长度为 正,表示截取长度,如:%date:~8,2%
,表示从正着数第8个字符,往后截取2个字符(不含第8个字符);
2)截止长度为 负,表示结束位置,如:%date:~-8,-3%
,表示从倒着数第8个字符,往后截取,一直截取到倒数第3个字符的位置(含倒数第8个字符,不含倒数第3个字符);
3)截止长度为 空,表示截取到结尾位置,如:%date:~4%
,表示从正着数第4个字符,往后截取所有字符(不含第4个字符);
(截止长度如果省略,不能有逗号占位,逗号占位会报:ECHO 处于打开状态)
2. 字符串拼接
字符串拼接比较简单,直接将多个字符串,结合想要的字符拼接到一起就行
C:\Users\cyinl>set var1=aaaC:\Users\cyinl>set var2=bbbC:\Users\cyinl>echo A=%var1%A=aaaC:\Users\cyinl>echo B=%var2%B=bbbC:\Users\cyinl>set "AB=%var1%%var2%"C:\Users\cyinl>echo %AB%aaabbbC:\Users\cyinl>echo %var1%^<%var2%aaa<bbbC:\Users\cyinl>echo %var1%^&^&%var2%aaa&&bbb
需要注意的是,bat批处理中有一些特殊字符,需要进行转义才能作为字符使用,如:
1、@命令行回显屏蔽符2、%批处理变量引导符3、>重定向符4、>>重定向符5、<、>&、<&重定向符6、|命令管道符7、^转义字符8、&组合命令9、&&组合命令10、||组合命令11、""字符串界定符...
3. 日期时间格式化
C:\Users\cyinl>echo %date:~0,4%-%date:~5,2%-%date:~8,2% %time:~0,8%-06-20 10:05:14C:\Users\cyinl>echo %date:~0,4%%date:~5,2%%date:~8,2%0620
四、使用示例
回归到最开始我要解决的问题,动态生成按日期划分的日志文件,bat 批处理脚本内容如下:
@echo offREM chcp 65001cd F:\Chen\python3\ExciseCset fdate=%date:~0,4%%date:~5,2%%date:~8,2%python CSDNScan_v2.py >> scan_history_%fdate%.log 2>&1REM ping -n 3 127.0.0.1>nulREM PAUSE
脚本运行后,生成的日志文件如下:
参考资料:/peng_cao/article/details/74170979