如何比较批处理脚本中的日期

时间:2015-05-21 12:14:31

标签: file batch-file

我有一个包含日期的文本文件(格式如2015年1月1日或2015年1月1日......两种格式都可以接受)。

现在我必须编写一个比较日期的批处理脚本。它必须表明2015年1月1日和2015年1月1日的日期相同。

我该怎么做?

2 个答案:

答案 0 :(得分:1)

这可能不是最优雅的方式,但为了让您获得一个可行的样本 - 这将执行您需要的比较:

Big-O

此示例可以很容易地用作子例程,它将@ECHO OFF SETLOCAL ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION REM Dates to compare. REM Change the values here to test the results. SET Date1=1/8/2015 SET Date2=01/08/2015 REM Break apart by slashes. FOR /F "tokens=1-3 delims=/" %%A IN ("%Date1%") DO ( SET Month1=00%%A SET Day1=00%%B SET Year1=20%%C REM Pad by taking the last chars from the right. SET Month1=!Month1:~-2! SET Day1=!Day1:~-2! SET Year1=!Year1:~-4! ) FOR /F "tokens=1-3 delims=/" %%A IN ("%Date2%") DO ( SET Month2=00%%A SET Day2=00%%B SET Year2=20%%C SET Month2=!Month2:~-2! SET Day2=!Day2:~-2! SET Year2=!Year2:~-4! ) REM Perform comparisions. IF /I "%Month1%" NEQ "%Month2%" GOTO NoMatch IF /I "%Day1%" NEQ "%Day2%" GOTO NoMatch IF /I "%Year1%" NEQ "%Year2%" GOTO NoMatch REM If we get here, a match was found. ECHO The dates are the same. GOTO :EOF :NoMatch ECHO The dates are different. ENDLOCAL Date1作为变量,然后设置一个返回变量以供在主程序中使用。

请注意,就脚本而言,月份或日期的顺序无关紧要。 Date2可以很容易地命名为Month1(等),脚本也可以正常工作。

答案 1 :(得分:0)

此方法使用一个子程序,允许您将两个日期与if命令的任何比较进行比较,例如leqgtr等。

@echo off

call :CompareDates 1/1/2015 equ 01/01/2015
if %errorlevel% equ 0 (
   echo Dates are equal
) else (
   echo Dates are different
)
goto :EOF


:CompareDates date1 comparison date2
for /F "tokens=1-6 delims=/" %%a in ("%1/%3") do (
   set /A m1=10%%a,d1=10%%b,y1=%%c, m2=10%%d,d2=10%%e,y2=%%f
)
if %y1%%m1:~-2%%d1:~-2% %2 %y2%%m2:~-2%%d2:~-2% exit /B 0
exit /B 1

此代码假设日期格式为MM / DD / YYYY。如果您的日期格式不同,只需使用正确的顺序更改m1命令中的d1m2d2set /A变量。