2013-07-15 114 views
2

如何比較批處理文件中的2個日期? 這個:在Windows批處理文件中比較2個日期

if %%newdate geq %olddate% _do smth_ 

不起作用。

在這種情況下,我有
27.05.201315.07.2013
14.07.2013更大小於15.07.2013

振亞

+0

見http://stackoverflow.com/questions/15670666/compare-2-dates-in-a-batch-file – devnull

+0

轉換日期爲公曆日期看看http://www.dostips.com /DtTipsDateTime.php#Function.date2jdate –

回答

6

試試這個:

set "sdate1=%olddate:~-4%%olddate:~3,2%%olddate:~0,2%" 
set "sdate2=%newdate:~-4%%newdate:~3,2%%newdate:~0,2%" 
if %sdate1% GTR %sdate2% (goto there) else echo here 
+0

我認爲,當使用引號時,它會強制執行ascii比較,因此您應該使用裸變量'如果%sdate1%GTR%sdate2%echo%olddate%大於%newdate%' – foxidrive

+0

@ foxidrive是的,你是正確的數字比較。但我認爲在這種特殊情況下這沒有什麼區別。不過,我做了一個編輯。我之前沒有多少考慮過它,數字比較更好,更安全。 – Endoro

+0

你是對的,在這種情況下無關緊要。事實上,如果數字非常大,那麼在超過數學限制時引用它們甚至是一個好處。 – foxidrive

1
call :date_to_number %date1% date1 
call :date_to_number %date2% date2 

if %date1% GEQ %date2% echo date1 is bigger 

goto :eof 
:date_to_number 
setlocal 
if "%~1" EQU "" goto :eof 
for /f "tokens=1,2,3 delims=." %%D in ("%~1") do (
    set "the_date=%%F%%E%%D" 
) 
endlocal & if "%~2" neq "" (set %~2=%the_date%) else echo %the_date% 
goto :eof 

但是,這將在格式DD日期纔有效。 MM.YYYY