Частенько бывает нужно для административных задач, например, скопировать файлы изменившиеся вчера.
@echo off
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 :: проверочка
rem echo %year%
rem echo %month%
rem echo %day%
echo %package%
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"
if %day% leq 9 set /a day=%day:~-1%
if %month% leq 9 set /a month=%month:~-1%
set /a day-=1
if "%day%"=="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%
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=%month%-%day%-%year%
goto :EOF
Код не мой, но более правильного решения я не нашел.
Немного (на мой взгляд) упростил и добавил два параметра при вызове getpackage: четвертый - знак плюс или минут (прибавляем или отнимаем дни), пятый - количество прибавляемых или отнимаемых дней от текущей даты
ОтветитьУдалить@echo off
call :getpackage %date:~0,2% %date:~3,2% %date:~6,4% + 3
echo %package%
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"
if %day% leq 9 set /a day=%day:~-1%
if %month% leq 9 set /a month=%month:~-1%
set /a day%4=%5
if "%day%"=="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%
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