一、背景
有一个批处理脚本,脚本中根据当前日期,动态的生成日志文件,
如:当前是 2023年06月20日,我希望生成的日志文件名为:XX_20230620.log
二、获取日期和时间
Windows 在批处理中 获取日期和时间的方式如下:
C:\Users\cyinl>echo "%date%"
"2023/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%
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 处于打开状态。
- 起始位置:
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=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、"" 字符串界定符
...
3. 日期时间格式化
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://www.toymoban.com/news/detail-681357.html
参考资料:https://blog.csdn.net/peng_cao/article/details/74170979文章来源地址https://www.toymoban.com/news/detail-681357.html
到了这里,关于Windows bat 批处理 日期时间格式化的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!