12.02.2014 10:08
Не впутываем тему с удалением файлов Как удалить файл старше Х дней
Иногда надо получить дату меньше или больше текущей на некоторое количество дней.
Нашел только datemath.cmd (прикрепляю), он неудобен тем, что дату тоже надо разбирать, да и много наверчено, а мне потестить в принципе, негде.
Есть у кого-то наработки, чтобы можно было от текущей даты отнимать и прибавлять дни?
Вложения
Тип файла: zip datemath.zip (2.1 Кб, 263 просмотров)
12.02.2014 11:36
чистым cmd давно не пользуюсь :) в основном vbs - но кое что по ссылкам осталось

посмотри

NT Batch files: Examples using DATE and TIME


там много очень много примеров по датам - тебе нужен dateadd.bat

ECHO DateAdd.bat, Version 1.10 for Windows NT 4 / 2000 / XP / Server 2003 / Vista
ECHO Add (or subtract) the specified number of days to (or from) the specified date
ECHO.
ECHO Usage: DATEADD [ date ] days
ECHO.
ECHO Where: "date" is a "normal" Gregorian date in the local computer's format
ECHO (default value if no date is specified: today's date)
ECHO "days" is the number of days to add or subtract
Вложения
Тип файла: zip dateadd.zip (2.4 Кб, 317 просмотров)
12.02.2014 12:05
Код:
@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
Часовой пояс GMT +3, время: 10:54.

Форум на базе vBulletin®
Copyright © Jelsoft Enterprises Ltd.
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.