Windows bat 批处理 日期时间格式化

一、背景

有一个批处理脚本,脚本中根据当前日期,动态的生成日志文件,
如:当前是 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://blog.csdn.net/peng_cao/article/details/74170979

猜你喜欢

转载自blog.csdn.net/B11050729/article/details/131291067