E:\>SETLOCAL ENABLEDELAYEDEXPANSION E:\>Rem Параметры расчета: кол-во дней (>0!) и направление (+/-) E:\>SET DAYS=13 E:\>SET SIGN=- E:\>Rem Установка окружения и цикл расчета E:\>CALL :GetDate E:\>FOR /F "tokens=1,3" %i IN ('REG QUERY "HKCU\Control Panel\International" /s|findstr /C:"iDate" /C:"sDate"') DO SET %i=%j E:\>SET iDate=1 E:\>SET sDate=. E:\>FOR /F "TOKENS=1-4* DELIMS=. " %A IN ('DATE/T') DO ( IF 1 == 0 ( SET Year=%C SET Month=%A SET Day=%B ) IF 1 == 1 ( SET Year=%C SET Month=%B SET Day=%A ) IF 1 == 2 ( SET Year=%A SET Month=%B SET Day=%C ) ) E:\>( IF 1 == 0 ( SET Year=2009 SET Month=25 SET Day=08 ) IF 1 == 1 ( SET Year=2009 SET Month=08 SET Day=25 ) IF 1 == 2 ( SET Year=25 SET Month=08 SET Day=2009 ) ) E:\>GOTO :EOF E:\>CALL :GetMnthDays E:\>IF 08 EQU 2 ( CALL :IsYearVisok SET /A DOFW = 28+!VISOK! ) ELSE ( SET NUM=0 FOR %i IN (31 28 31 30 31 30 31 31 30 31 30 31) DO ( SET /A NUM=!NUM!+1 IF 08 EQU !NUM! ( SET DOFW=%i GOTO :EOF ) ) ) E:\>( SET /A NUM=!NUM!+1 IF 08 EQU !NUM! ( SET DOFW=31 GOTO :EOF ) ) E:\>( SET /A NUM=!NUM!+1 IF 08 EQU !NUM! ( SET DOFW=28 GOTO :EOF ) ) E:\>( SET /A NUM=!NUM!+1 IF 08 EQU !NUM! ( SET DOFW=31 GOTO :EOF ) ) E:\>( SET /A NUM=!NUM!+1 IF 08 EQU !NUM! ( SET DOFW=30 GOTO :EOF ) ) E:\>( SET /A NUM=!NUM!+1 IF 08 EQU !NUM! ( SET DOFW=31 GOTO :EOF ) ) E:\>( SET /A NUM=!NUM!+1 IF 08 EQU !NUM! ( SET DOFW=30 GOTO :EOF ) ) E:\>( SET /A NUM=!NUM!+1 IF 08 EQU !NUM! ( SET DOFW=31 GOTO :EOF ) ) E:\>( SET /A NUM=!NUM!+1 IF 08 EQU !NUM! ( SET DOFW=31 GOTO :EOF ) ) E:\>( SET /A NUM=!NUM!+1 IF 08 EQU !NUM! ( SET DOFW=30 GOTO :EOF ) ) E:\>( SET /A NUM=!NUM!+1 IF 08 EQU !NUM! ( SET DOFW=31 GOTO :EOF ) ) E:\>( SET /A NUM=!NUM!+1 IF 08 EQU !NUM! ( SET DOFW=30 GOTO :EOF ) ) E:\>( SET /A NUM=!NUM!+1 IF 08 EQU !NUM! ( SET DOFW=31 GOTO :EOF ) ) E:\>GOTO :EOF E:\>CALL :NextDay "-1" E:\>SET /A Day=25-1 E:\>IF 24 GTR !DOFW! ( CALL :NextMonth +1 CALL :GetMnthDays SET /A Day=1 ) E:\>SET /A MNDF=2009*12+08+1 E:\>SET /A Year=(-1)/12 E:\>SET /A Month=-0*12 E:\>GOTO :EOF E:\>IF 0 EQU 2 ( CALL :IsYearVisok SET /A DOFW = 28+!VISOK! ) ELSE ( SET NUM=0 FOR %i IN (31 28 31 30 31 30 31 31 30 31 30 31) DO ( SET /A NUM=!NUM!+1 IF 0 EQU !NUM! ( SET DOFW=%i GOTO :EOF ) ) ) E:\>( SET /A NUM=!NUM!+1 IF 0 EQU !NUM! ( SET DOFW=31 GOTO :EOF ) ) E:\>( SET /A NUM=!NUM!+1 IF 0 EQU !NUM! ( SET DOFW=28 GOTO :EOF ) ) E:\>( SET /A NUM=!NUM!+1 IF 0 EQU !NUM! ( SET DOFW=31 GOTO :EOF ) ) E:\>( SET /A NUM=!NUM!+1 IF 0 EQU !NUM! ( SET DOFW=30 GOTO :EOF ) ) E:\>( SET /A NUM=!NUM!+1 IF 0 EQU !NUM! ( SET DOFW=31 GOTO :EOF ) ) E:\>( SET /A NUM=!NUM!+1 IF 0 EQU !NUM! ( SET DOFW=30 GOTO :EOF ) ) E:\>( SET /A NUM=!NUM!+1 IF 0 EQU !NUM! ( SET DOFW=31 GOTO :EOF ) ) E:\>( SET /A NUM=!NUM!+1 IF 0 EQU !NUM! ( SET DOFW=31 GOTO :EOF ) ) E:\>( SET /A NUM=!NUM!+1 IF 0 EQU !NUM! ( SET DOFW=30 GOTO :EOF ) ) E:\>( SET /A NUM=!NUM!+1 IF 0 EQU !NUM! ( SET DOFW=31 GOTO :EOF ) ) E:\>( SET /A NUM=!NUM!+1 IF 0 EQU !NUM! ( SET DOFW=30 GOTO :EOF ) ) E:\>( SET /A NUM=!NUM!+1 IF 0 EQU !NUM! ( SET DOFW=31 GOTO :EOF ) ) E:\>GOTO :EOF E:\>IF 1 EQU 0 ( CALL :NextMonth -1 CALL :GetMnthDays SET /A Day=!DOFW! ) E:\>GOTO :EOF E:\>SET /A DAYS=13-1 E:\>IF 12 NEQ 0 GOTO :Start E:\>CALL :NextDay "-1" E:\>SET /A Day=1-1 E:\>IF 0 GTR !DOFW! ( CALL :NextMonth +1 CALL :GetMnthDays SET /A Day=1 ) E:\>IF 0 EQU 0 ( CALL :NextMonth -1 CALL :GetMnthDays SET /A Day=!DOFW! ) E:\>SET /A MNDF=0*12+0-1 E:\>SET /A Year=(-1-1)/12 E:\>SET /A Month=-1-0*12 E:\>GOTO :EOF E:\>IF -1 EQU 2 ( CALL :IsYearVisok SET /A DOFW = 28+!VISOK! ) ELSE ( SET NUM=0 FOR %i IN (31 28 31 30 31 30 31 31 30 31 30 31) DO ( SET /A NUM=!NUM!+1 IF -1 EQU !NUM! ( SET DOFW=%i GOTO :EOF ) ) ) E:\>( SET /A NUM=!NUM!+1 IF -1 EQU !NUM! ( SET DOFW=31 GOTO :EOF ) ) E:\>( SET /A NUM=!NUM!+1 IF -1 EQU !NUM! ( SET DOFW=28 GOTO :EOF ) ) E:\>( SET /A NUM=!NUM!+1 IF -1 EQU !NUM! ( SET DOFW=31 GOTO :EOF ) ) E:\>( SET /A NUM=!NUM!+1 IF -1 EQU !NUM! ( SET DOFW=30 GOTO :EOF ) ) E:\>( SET /A NUM=!NUM!+1 IF -1 EQU !NUM! ( SET DOFW=31 GOTO :EOF ) ) E:\>( SET /A NUM=!NUM!+1 IF -1 EQU !NUM! ( SET DOFW=30 GOTO :EOF ) ) E:\>( SET /A NUM=!NUM!+1 IF -1 EQU !NUM! ( SET DOFW=31 GOTO :EOF ) ) E:\>( SET /A NUM=!NUM!+1 IF -1 EQU !NUM! ( SET DOFW=31 GOTO :EOF ) ) E:\>( SET /A NUM=!NUM!+1 IF -1 EQU !NUM! ( SET DOFW=30 GOTO :EOF ) ) E:\>( SET /A NUM=!NUM!+1 IF -1 EQU !NUM! ( SET DOFW=31 GOTO :EOF ) ) E:\>( SET /A NUM=!NUM!+1 IF -1 EQU !NUM! ( SET DOFW=30 GOTO :EOF ) ) E:\>( SET /A NUM=!NUM!+1 IF -1 EQU !NUM! ( SET DOFW=31 GOTO :EOF ) ) E:\>GOTO :EOF E:\>GOTO :EOF E:\>SET /A DAYS=12-1 E:\>IF 11 NEQ 0 GOTO :Start E:\>CALL :NextDay "-1" E:\>SET /A Day=0-1 E:\>IF -1 GTR !DOFW! ( CALL :NextMonth +1 CALL :GetMnthDays SET /A Day=1 ) E:\>IF -1 EQU 0 ( CALL :NextMonth -1 CALL :GetMnthDays SET /A Day=!DOFW! ) E:\>GOTO :EOF E:\>SET /A DAYS=11-1 E:\>IF 10 NEQ 0 GOTO :Start E:\>CALL :NextDay "-1" E:\>SET /A Day=-1-1 E:\>IF -2 GTR !DOFW! ( CALL :NextMonth +1 CALL :GetMnthDays SET /A Day=1 ) E:\>IF -2 EQU 0 ( CALL :NextMonth -1 CALL :GetMnthDays SET /A Day=!DOFW! ) E:\>GOTO :EOF E:\>SET /A DAYS=10-1 E:\>IF 9 NEQ 0 GOTO :Start E:\>CALL :NextDay "-1" E:\>SET /A Day=-2-1 E:\>IF -3 GTR !DOFW! ( CALL :NextMonth +1 CALL :GetMnthDays SET /A Day=1 ) E:\>IF -3 EQU 0 ( CALL :NextMonth -1 CALL :GetMnthDays SET /A Day=!DOFW! ) E:\>GOTO :EOF E:\>SET /A DAYS=9-1 E:\>IF 8 NEQ 0 GOTO :Start E:\>CALL :NextDay "-1" E:\>SET /A Day=-3-1 E:\>IF -4 GTR !DOFW! ( CALL :NextMonth +1 CALL :GetMnthDays SET /A Day=1 ) E:\>IF -4 EQU 0 ( CALL :NextMonth -1 CALL :GetMnthDays SET /A Day=!DOFW! ) E:\>GOTO :EOF E:\>SET /A DAYS=8-1 E:\>IF 7 NEQ 0 GOTO :Start E:\>CALL :NextDay "-1" E:\>SET /A Day=-4-1 E:\>IF -5 GTR !DOFW! ( CALL :NextMonth +1 CALL :GetMnthDays SET /A Day=1 ) E:\>IF -5 EQU 0 ( CALL :NextMonth -1 CALL :GetMnthDays SET /A Day=!DOFW! ) E:\>GOTO :EOF E:\>SET /A DAYS=7-1 E:\>IF 6 NEQ 0 GOTO :Start E:\>CALL :NextDay "-1" E:\>SET /A Day=-5-1 E:\>IF -6 GTR !DOFW! ( CALL :NextMonth +1 CALL :GetMnthDays SET /A Day=1 ) E:\>IF -6 EQU 0 ( CALL :NextMonth -1 CALL :GetMnthDays SET /A Day=!DOFW! ) E:\>GOTO :EOF E:\>SET /A DAYS=6-1 E:\>IF 5 NEQ 0 GOTO :Start E:\>CALL :NextDay "-1" E:\>SET /A Day=-6-1 E:\>IF -7 GTR !DOFW! ( CALL :NextMonth +1 CALL :GetMnthDays SET /A Day=1 ) E:\>IF -7 EQU 0 ( CALL :NextMonth -1 CALL :GetMnthDays SET /A Day=!DOFW! ) E:\>GOTO :EOF E:\>SET /A DAYS=5-1 E:\>IF 4 NEQ 0 GOTO :Start E:\>CALL :NextDay "-1" E:\>SET /A Day=-7-1 E:\>IF -8 GTR !DOFW! ( CALL :NextMonth +1 CALL :GetMnthDays SET /A Day=1 ) E:\>IF -8 EQU 0 ( CALL :NextMonth -1 CALL :GetMnthDays SET /A Day=!DOFW! ) E:\>GOTO :EOF E:\>SET /A DAYS=4-1 E:\>IF 3 NEQ 0 GOTO :Start E:\>CALL :NextDay "-1" E:\>SET /A Day=-8-1 E:\>IF -9 GTR !DOFW! ( CALL :NextMonth +1 CALL :GetMnthDays SET /A Day=1 ) E:\>IF -9 EQU 0 ( CALL :NextMonth -1 CALL :GetMnthDays SET /A Day=!DOFW! ) E:\>GOTO :EOF E:\>SET /A DAYS=3-1 E:\>IF 2 NEQ 0 GOTO :Start E:\>CALL :NextDay "-1" E:\>SET /A Day=-9-1 E:\>IF -10 GTR !DOFW! ( CALL :NextMonth +1 CALL :GetMnthDays SET /A Day=1 ) E:\>IF -10 EQU 0 ( CALL :NextMonth -1 CALL :GetMnthDays SET /A Day=!DOFW! ) E:\>GOTO :EOF E:\>SET /A DAYS=2-1 E:\>IF 1 NEQ 0 GOTO :Start E:\>CALL :NextDay "-1" E:\>SET /A Day=-10-1 E:\>IF -11 GTR !DOFW! ( CALL :NextMonth +1 CALL :GetMnthDays SET /A Day=1 ) E:\>IF -11 EQU 0 ( CALL :NextMonth -1 CALL :GetMnthDays SET /A Day=!DOFW! ) E:\>GOTO :EOF E:\>SET /A DAYS=1-1 E:\>IF 0 NEQ 0 GOTO :Start E:\>Rem Вывод результата и завершение работы E:\>CALL :ShowDate E:\>SET Month=0-1 E:\>SET Month=-1 E:\>SET Day=0-11 E:\>SET Day=11 E:\>IF 1 == 0 ECHO -1.11.0 E:\>IF 1 == 1 ECHO 11.-1.0 11.-1.0 E:\>IF 1 == 2 ECHO 0.-1.11 E:\>GOTO :EOF E:\>EXIT