有一个批处理脚本,脚本中根据当前日期,动态的生成日志文件,
如:当前是 2023年06月20日,我希望生成的日志文件名为:XX_20230620.log
Windows 在批处理中 获取日期和时间的方式如下:
C:\Users\cyinl>echo "%date%"
"2023/06/20 周一"
C:\Users\cyinl>echo "%time%"
"09:47:34.41"
Windows 在批处理中对日期时间格式化的处理,其实就是对字符串的处理。
%date%、%time% 都是字符串,只需对两者进行截取再拼接为需要的格式即可。
语法:目标字符串=%源字符串:~起始位置,截取长度%
C:\Users\cyinl>echo %date%
2023/06/20 周二
C:\Users\cyinl>echo %date:~0,4%
2023
C:\Users\cyinl>echo %date:~5,2%
06
C:\Users\cyinl>echo %date:~8,2%
20
C:\Users\cyinl>echo %date:~-2%
周一
C:\Users\cyinl>echo %date:~0,-2%
2023/06/20
C:\Users\cyinl>echo %date:~-8,3%
06/
C:\Users\cyinl>echo %date:~-8,-3%
06/20
C:\Users\cyinl>echo %date:~4%
/06/20 周一
C:\Users\cyinl>echo %date:~,4%
2023
C:\Users\cyinl>echo %date:~4,%
ECHO 处于打开状态。
%date:~5,2%
,表示从正着数第5个字符,往后截取2个字符(不含第5个字符);%date:~-8,3%
,表示从倒着数第8个字符,往后截取3个字符(含第8个字符);%date:~,4%
,%date:~0,4%
都表示从左边起始位置,截取2个字符;%date:~8,2%
,表示从正着数第8个字符,往后截取2个字符(不含第8个字符);%date:~-8,-3%
,表示从倒着数第8个字符,往后截取,一直截取到倒数第3个字符的位置(含倒数第8个字符,不含倒数第3个字符);%date:~4%
,表示从正着数第4个字符,往后截取所有字符(不含第4个字符);字符串拼接比较简单,直接将多个字符串,结合想要的字符拼接到一起就行
C:\Users\cyinl>set var1=aaa
C:\Users\cyinl>set var2=bbb
C:\Users\cyinl>echo A=%var1%
A=aaa
C:\Users\cyinl>echo B=%var2%
B=bbb
C:\Users\cyinl>set "AB=%var1%%var2%"
C:\Users\cyinl>echo %AB%
aaabbb
C:\Users\cyinl>echo %var1%^<%var2%
aaa<bbb
C:\Users\cyinl>echo %var1%^&^&%var2%
aaa&&bbb
需要注意的是,bat批处理中有一些特殊字符,需要进行转义才能作为字符使用,如:
1、@ 命令行回显屏蔽符
2、% 批处理变量引导符
3、> 重定向符
4、>> 重定向符
5、<、>&、<& 重定向符
6、| 命令管道符
7、^ 转义字符
8、& 组合命令
9、&& 组合命令
10、|| 组合命令
11、"" 字符串界定符
...
C:\Users\cyinl>echo %date:~0,4%-%date:~5,2%-%date:~8,2% %time:~0,8%
2023-06-20 10:05:14
C:\Users\cyinl>echo %date:~0,4%%date:~5,2%%date:~8,2%
20230620
回归到最开始我要解决的问题,动态生成按日期划分的日志文件,bat 批处理脚本内容如下:
@echo off
REM chcp 65001
cd F:\Chen\python3\ExciseC
set fdate=%date:~0,4%%date:~5,2%%date:~8,2%
python CSDNScan_v2.py >> scan_history_%fdate%.log 2>&1
REM ping -n 3 127.0.0.1>nul
REM PAUSE
参考资料:https://blog.csdn.net/peng_cao/article/details/74170979