如何使用Windows Batch脚本计算证书剩余到期天数
Windows Batch 实现证书到期剩余天数计算脚本
实现逻辑
- 第一步:从证书信息中匹配包含
until:的行,提取到期时间字段 - 第二步:将英文月份缩写转换为数字格式,方便日期计算
- 第三步:分别将到期日期、当前系统日期转换为累计天数格式,差值即为剩余天数
- 第四步:处理证书已过期的异常场景
完整脚本代码
@echo off setlocal enabledelayedexpansion :: 配置项:证书信息文件路径,可根据需求修改为读取命令输出 set "CERT_FILE=cert.txt" :: 英文月份缩写映射为数字 set "MONTH_MAP=Jan:1 Feb:2 Mar:3 Apr:4 May:5 Jun:6 Jul:7 Aug:8 Sep:9 Oct:10 Nov:11 Dec:12" :: 1. 提取until字段后的到期日期字符串 for /f "tokens=* delims=" %%a in ('type "%CERT_FILE%" ^| findstr /i "until:"') do ( set "line=%%a" set "expire_str=!line:*until:=!" ) :: 2. 拆分得到到期日期的月、日、年 for /f "tokens=2,3,6 delims= " %%b in ("!expire_str!") do ( set "e_mon_str=%%b" set "e_day=%%c" set "e_year=%%d" ) :: 3. 转换到期月份为数字格式 for %%m in (%MONTH_MAP%) do ( for /f "tokens=1,2 delims=:" %%x in ("%%m") do ( if "%%x"=="!e_mon_str!" set "e_mon=%%y" ) ) :: 4. 调用子程序把到期日期转成累计天数 call :date_to_days %e_year% %e_mon% %e_day% e_days :: 5. 读取当前系统日期并转成累计天数(国内系统默认年-月-日格式,其他格式需调整拆分规则) for /f "tokens=1-3 delims=/- " %%a in ("%date%") do ( set "c_year=%%a" set "c_mon=%%b" set "c_day=%%c" ) call :date_to_days %c_year% %c_mon% %c_day% c_days :: 6. 计算剩余天数 set /a left_days=!e_days! - !c_days! if !left_days! gtr 0 ( echo 证书距离到期还有 !left_days! 天 ) else ( set /a expired_days=0 - !left_days! echo 证书已过期 !expired_days! 天 ) endlocal pause goto :eof :: 日期转累计天数子程序,入参顺序:年 月 日 结果存储变量名 :date_to_days setlocal set "y=%~1" set "m=%~2" set "d=%~3" set /a "m-=12,m+=3,y-=!m! /12" set /a "days= 365*y + y/4 - y/100 + y/400 + (153*m +2)/5 +d" endlocal & set "%~4=%days%" goto :eof
使用说明
- 先将你的证书信息保存到和脚本同目录的
cert.txt中即可直接运行 - 如果需要直接读取openssl命令的输出无需保存文件,可以将第一步提取到期日期的for语句替换为:
for /f "tokens=* delims=" %%a in ('openssl x509 -in 你的证书路径.cer -noout -dates ^| findstr /i "until:"') do (
- 若你的系统日期格式为
月/日/年,自行调整拆分当前日期的变量赋值顺序即可
内容的提问来源于stack exchange,提问作者bilpost
相关产品推荐
相关产品推荐

