我有一个包含日期的文本文件(格式如2015年1月1日或2015年1月1日......两种格式都可以接受)。
现在我必须编写一个比较日期的批处理脚本。它必须表明2015年1月1日和2015年1月1日的日期相同。
我该怎么做?
答案 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
命令的任何比较进行比较,例如leq
,gtr
等。
@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
命令中的d1
,m2
,d2
,set /A
变量。