@echo off SetLocal EnableDelayedExpansion rem Собственно, количество дней (плюс или минус) от текущей даты Set /a DayIzm=-714 for /f "skip=2 tokens=2*" %%i in ('reg QUERY "HKCU\Control Panel\International" /v sDate') do set sdate=%%j for /f "delims=%sdate% tokens=1,2,3" %%i in ("%DATE%") do call :getpackage %%i %%j %%k rem выведем результат echo %package% rem pause rem :: тут можно поместить необходимые нам команды goto :EOF :getpackage set day=%1 set month=%2 set /a year=%3 set lastdays="31 28 31 30 31 30 31 31 30 31 30 31" set strlstd="31 28 31 30 31 30 31 31 30 31 30 31" if %day% leq 9 set /a day=%day:~-1% if %month% leq 9 set /a month=%month:~-1% set /a day+=%DayIzm% if %DayIzm% lss 0 goto ST_Minus :St_Plus rem смотрим максимум в текущем месяце set /a isleap="(year%%4)&((year%%100)|(year%%400))" if "%isleap%"=="0" set lastdays=%strlstd:28=29% for /f "tokens=%month%" %%i in (%lastdays%) do set tek_lday=%%i if %day% gtr %tek_lday% ( set /a day-=%tek_lday% set /a month+=1 if !month! gtr 12 set /a month=1,year+=1 goto ST_Plus ) goto Prod :ST_Minus rem Для начала посмотрим максимум в предыдущем месяце set /a monthp=%month%-1 set /a yearp=%year% if %monthp% lss 1 set /a monthp=12,yearp-=1 set /a isleap="(yearp%%4)&((yearp%%100)|(yearp%%400))" if "%isleap%"=="0" set lastdays=%strlstd:28=29% for /f "tokens=%monthp%" %%i in (%lastdays%) do set tek_lday=%%i if %day% lss 1 ( set /a month-=1 if !month! lss 1 set /a month=12,year-=1 set /a day+=%tek_lday% goto ST_Minus ) :Prod set /a isleap="(year%%4)&((year%%100)|(year%%400))" if "%isleap%"=="0" set lastdays=%strlstd:28=29% if "%day%"=="0" for /f "tokens=%month%" %%i in (%lastdays%) do set day=%%i if %day% leq 9 set day=0%day% if %month% leq 9 set month=0%month% set package=%year%-%month%-%day% goto :EOF