Имя пользователя:
Пароль:
 

Показать сообщение отдельно

Ветеран


Contributor


Сообщения: 2735
Благодарности: 1699

Профиль | Отправить PM | Цитировать


Если начальная и конечная дата в пределах одного месяца, то всё нормально, в противном в любом месяце принимается число дней 31. Делать контроль на правильное число дней в месяце нет моральных сил.
Код: Выделить весь код
@Echo Off
cls
SetLocal EnableExtensions EnableDelayedExpansion

Set /P Date1= Input first Date dd.mm.yyyy=
Call :ErrDate "%Date1%" "YDM"
If Not %Log%==1 GoTo :End
Set /A YDM1=%YDM%

Set /P Date2= Input  last Date dd.mm.yyyy=
Call :ErrDate "%Date2%" "YDM"
If Not %Log%==1 GoTo :End
Set /A YDM2=%YDM%

FOR /L %%i IN (%YDM1%,1,%YDM2%) DO (
	Set /A YDM=%%i
	Set /A YY=1!YDM:~0,4!
	Set /A MM=1!YDM:~4,2!
	Set /A DD=1!YDM:~6,2!
	If 101 LEQ !DD! If !DD! LEQ 131 If 101 LEQ !MM! If !MM! LEQ 112 Md !YDM:~0,4!.!YDM:~4,2!.!YDM:~6,2! 2>nul
)
GoTo :Eof

:End

Echo %YDM%  Input date not correct 
pause

GoTo :Eof

:ErrDate
	Set "%~2=%~1"
	Set "Log=0"
	Set "Dot=%~1"
	If "%Dot:~2,1%%Dot:~5,1%"==".." Set "Log=1"
	If !Log!==1 (Set "Log=0" &Set "DD=1%Dot:~0,2%" &Set /A DD=!DD!*2/2 2>nul &&If 1%Dot:~0,2% EQU !DD! Set "Log=1")
	If !Log!==1 (Set "Log=0" &Set "MM=1%Dot:~3,2%" &Set /A MM=!MM!*2/2 2>nul &&If 1%Dot:~3,2% EQU !MM! Set "Log=1")
	If !Log!==1 (Set "Log=0" &Set "YY=1%Dot:~6,4%" &Set /A YY=!YY!*2/2 2>nul &&If 1%Dot:~6,4% EQU !YY! Set "Log=1")
	If !Log!==1 (Set "Log=0" &If 101 LEQ !DD! If !DD! LEQ 131 Set "Log=1")
	If !Log!==1 (Set "Log=0" &If 101 LEQ !MM! If !MM! LEQ 112 Set "Log=1")
	If !Log!==1 (Set "Log=0" &If 11980 LEQ !YY! If !YY! LEQ 12100 Set "Log=1")
	If !Log!==1 Set "%~2=%YY:~1,4%%MM:~1,2%%DD:~1,2%"
GoTo :Eof

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.

Это сообщение посчитали полезным следующие участники:

Отправлено: 18:59, 12-12-2016 | #12