计算剩余天数的批处理脚本

Posted

技术标签:

【中文标题】计算剩余天数的批处理脚本【英文标题】:Batch script to calculate remaining days 【发布时间】:2022-01-09 22:39:52 【问题描述】:

在 Windows 批处理脚本中,

我想提取“直到:”之后的日期,并用当前日期计算证书到期前还剩多少天。

Serial number: 1300000119b2de558ca060bb5e000000000119
Valid from: Mon Jun 14 20:17:27 EET 2021 until: Thu Jun 08 14:36:44 EET 2023
Certificate fingerprints:

【问题讨论】:

【参考方案1】:

花了几个小时在互联网上搜索后,我完成了脚本。我测试了很多场景,它看起来不错,对我来说已经足够了。谢谢。

@ECHO OFF

for /F "delims=" %%a in ('findstr "until:" %1') do set var=%%a
set "var2=%var:*Until: =%"
set "certyear=%var2:*EET =%"
set "certstringmonth=%var2:~4,3%"
for %%G in ("Jan 1" "Feb 2" "Mar 3" "Apr 4" "May 5" "Jun 6" "Jul 7" "Aug 8" "Sep 9" "Oct 10" "Nov 11" "Dec 12") do for /F "tokens=1,2" %%H in (%%G) do if %certstringmonth% == %%H set "certmonth=%%I" & goto HaveMonth
:HaveMonth
set "certday=%var2:~8,2%"
for /F "tokens=* delims=0" %%I in ("%certday%") do set "certday=%%I"
for /F "skip=1 delims=" %%F in ('
    wmic PATH Win32_LocalTime GET Day^,Month^,Year /FORMAT:TABLE
') do (
    for /F "tokens=1-3" %%L in ("%%F") do (
        set CurrDay=%%L
        set CurrMonth=%%M
        set CurrYear=%%N
    )
)
set CurrDay=%CurrDay:~-2%
set CurrMonth=%CurrMonth:~-2%

IF %certyear% GTR %CurrYear% (call:c1 "%certyear%" "%CurrYear%") ELSE (IF %certyear% LSS %CurrYear% (call:c0) ELSE (IF %certyear% == %CurrYear% ( IF %certmonth% GTR %Currmonth% (call:c4 "%certday%" "%certmonth%" "%certyear%" "%Currmonth%") ELSE ( IF %certmonth% LSS %Currmonth% (call:c0) ELSE ( IF %certmonth% == %Currmonth% ( IF %certday% GTR %Currday% (call:c5 "%certday%" "%certmonth%" "%certyear%" "%Currday%") ELSE (IF %certday% LEQ %Currday% (call:c0))))))))

:c0
    ECHO 0 days remaining... It is already expired %certday%/%certmonth%/%certyear%
    EXIT

:c1
    SET /A "difyear=%~1 - %~2"
    IF "%difyear%" GTR "1" (call:c2 "%difyear%" "%certday%" "%certmonth%" "%certyear%") ELSE (call:c3 "%certday%" "%certmonth%" "%certyear%" "%Currmonth%") 
    EXIT

:c2
    SET /A "days = %~1 * 365"
    ECHO %days% days remaining until %~2/%~3/%~4
    EXIT

:c3
    SET /A "remmonth = 12 - %~4"
    SET /A "difmonth = %remmonth% + %~2"
    SET /A "days = %difmonth% * 30"
    ECHO %days% days remaining until %~1/%~2/%~3
    EXIT

:c4
    SET /A "dif2month = %~3 - %~4"
    SET /A "days = %dif2month% * 30"
    ECHO %days% days remaining until %~1/%~2/%~3
    EXIT

:c5
    SET /A "days = %~1 - %~4"
    ECHO %days% days remaining until %~1/%~2/%~3
    EXIT

【讨论】:

以上是关于计算剩余天数的批处理脚本的主要内容,如果未能解决你的问题,请参考以下文章

计算剩余天数[重复]

计算剩余天数[重复]

批处理脚本 - 计算文件中字符的实例

计算生日的剩余天数?

如何计算给定日期的剩余天数、小时数、分钟数和秒数?

批处理脚本从所有用户获取计算机上的所有打印机