Kirillhome
Full Member | Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Код: @echo off if "%1"=="" goto :_NO_ARG if %1 GTR 40000 goto :_ERR_BIG if %1 LSS -40000 goto :_ERR_SMALL rem определим, сколько вычитаем.... Set /A Day_minus=%1 if %Day_minus% GTR 0 echo Вычитаем %Day_minus% if %Day_minus% LEQ 0 echo Вычитаем %Day_minus% (ну, т.е. прибавляем ) echo.>"%TEMP%\~.ddf" makecab /D RptFileName="%TEMP%\~.rpt" /D InfFileName="%TEMP%\~.inf" -f "%TEMP%\~.ddf">nul rem Определим current-date в формате ГГГГ-Месяц(прописью)-День for /f "tokens=4,5,7" %%a in ('type "%TEMP%\~.rpt"') do if not defined current-date set "current-date=%%c-%%a-%%b" rem Если нужно - определим день недели (Mon, Thu и т.д.) rem for /f "tokens=3" %%a in ('type "%TEMP%\~.rpt"') do if not defined weekday set "weekday=%%a" del /q "%TEMP%\~.*" for /f "delims=- tokens=1,2,3" %%i in ("%current-date%") do call :getpackage %%i %%j %%k rem Собственно, значения.... echo %year% echo %month% echo %day% echo package=%package% goto :EOF :_NO_ARG echo Нет аргумента ... Не буду считать goto :EOF :_ERR_BIG echo выбранное значение %1 больше 40'000 ... Не буду считать goto :EOF :_ERR_Small echo выбранное значение %1 меньше -40'000 ... Не буду считать goto :EOF :getpackage set day=%3 set month=%2 set /a year=%1 rem Преобразуем месяц в число if /i "%month%"=="Jan" set /a month=1 if /i "%month%"=="Feb" set /a month=2 if /i "%month%"=="Mar" set /a month=3 if /i "%month%"=="Apr" set /a month=4 if /i "%month%"=="May" set /a month=5 if /i "%month%"=="Jun" set /a month=6 if /i "%month%"=="Jul" set /a month=7 if /i "%month%"=="Aug" set /a month=8 if /i "%month%"=="Sep" set /a month=9 if /i "%month%"=="Oct" set /a month=10 if /i "%month%"=="Nov" set /a month=11 if /i "%month%"=="Dec" set /a month=12 set lastdays="31 28 31 30 31 30 31 31 30 31 30 31" if %day% leq 9 set /a day=%day:~-1% set /a day=%day%-%Day_minus rem @echo on if %Day_minus% GTR 0 GOTO :_PRV_MINUS if %Day_minus% LEQ 0 GOTO :_PRV_PLUS rem @echo off rem организуем цикл, пока день меньше нуля :_PRV_MINUS if %day% LEQ 0 set /a month-=1 if "%month%"=="0" set /a month=12,year-=1 set /a isleap="(year%%4)&((year%%100)|(year%%400))" if "%isleap%"=="0" ( set lastdays=%lastdays:28=29% ) else ( set lastdays=%lastdays:29=28% ) if %day% LEQ 0 for /f "tokens=%month%" %%i in (%lastdays%) do set /a day=%%i+%day% if %day% LEQ 0 GOTO :_PRV_MINUS GOTO :_PRV_END rem организуем цикл, пока день больше последнего в месяце :_PRV_PLUS set /a isleap="(year%%4)&((year%%100)|(year%%400))" if "%isleap%"=="0" set lastdays=%lastdays:28=29% for /f "tokens=%month%" %%i in (%lastdays%) do set /a lastdaym=%%i if %day% GTR %lastdaym% set /a month+=1 if %day% GTR %lastdaym% set /a day=%day%-%lastdaym% if "%month%"=="13" set /a month=1,year+=1 set /a isleap="(year%%4)&((year%%100)|(year%%400))" if "%isleap%"=="0" ( set lastdays=%lastdays:28=29% ) else ( set lastdays=%lastdays:29=28% ) for /f "tokens=%month%" %%i in (%lastdays%) do set /a lastdaym=%%i if %day% GTR %lastdaym% GOTO :_PRV_PLUS :_PRV_END if %day% leq 9 set day=0%day% if %month% leq 9 set month=0%month% set package=%year%-%month%-%day% | | Всего записей: 426 | Зарегистр. 23-11-2004 | Отправлено: 02:52 06-01-2010 | Исправлено: Kirillhome, 02:59 06-01-2010 |
|