Цитата zavoruev:
чтобы после отрабатывания вот этого скрипта удалялись папки недельной давности отсчетом от вновь созданного »
|
в такой формулировке батник будет слишком громоздким:
Код:

@Echo Off
:: Параметры скрипта, 0 < $OLD < 29!
:: $OLD - столько ДНЕЙ храним архивы
Set $SRC=D:\Mazda
Set $DST=D:\Backup
Set $OLD=6
:: Находим текущие день/месяц/год
For /F "Tokens=1 Delims=." %%i In ('WMIC OS Get LocalDateTime^|Find "."') Do Set $Time=%%i
Set $Y=%$Time:~0,4%&Set $M=0%$Time:~4,2%&Set $D=0%$Time:~6,2%
Set $M=%$M:~-2%&Set $D=%$D:~-2%
:: Создаем каталог/делаем архив
XCopy /S/E/D/C/Q %$SRC%\* %$DST%\%$D%.%$M%.%$Y:~-2%\
:: Удаляем старые архивные каталоги
Call :GetOldDate %$OLD%
For /F "Tokens=1-3 Delims=." %%i In ('DIR /B/A:D %$DST%\??.??.??') Do If %%k%%j%%i LEQ %$Y:~-2%%$M%%$D% RD /S/Q "%$DST%\%%i.%%j.%%k"
:: Выход
EXIT
:GetOldDate
:: -----------------------------------
:: Расчет даты, предшествующей текущей
:: заданное количество дней (< 29)
:: -----------------------------------
Set /A $D -= %1
If %$D% GTR 0 GoTo GetOldDate_2
:: Месяц, год, дней в месяце
Set /A $M=%$M%+11-((%$M%+10)/12)*12
If %$M% EQU 12 Set /A $Y-=1
For /F "Tokens=%$M%" %%i In ("31 28 31 30 31 30 31 31 30 31 30 31") Do Set $X=%%i
If %$M% NEQ 2 GoTo GetOldDate_1
:: Февраль високосного года
Set /A $B1=%$Y%-(%$Y%/4)*4
Set /A $B2=%$Y%-(%$Y%/100)*100
Set /A $B3=%$Y%-(%$Y%/400)*400
If 0 EQU %$B1% If 0 NEQ %$B2% Set /A $X+=1
If 0 EQU %$B3% Set /A $X+=1
:: День месяца
:GetOldDate_1
Set /A $D=%$D%+%$X%-((%$D%+%$X%-1)/%$X%)*%$X%
:: Форматирование даты
:GetOldDate_2
Set $M=0%$M%&Set $D=0%$D%
Set $M=%$M:~-2%&Set $D=%$D:~-2%
GoTo :EOF
Практичней опираться не на "давность" архивов, а на их количество. Предположим, вам пришлось отключить технику на новогодние праздники (~10 дней), после выходных, при первом запуске будут удалены ВСЕ каталоги кроме текущего. Удобней ограничить количество хранимых каталогов (в зависимости от выделенного дискового пространства). Один из таких вариантов:
Код:

@Echo Off
SetLocal EnableDelayedExpansion
:: ЧТО и КУДА копируем, сколько храним
:: $OLD - КОЛИЧЕСТВО хранимых архивов
Set $SRC=D:\Mazda
Set $DST=D:\Backup
Set $OLD=6
:: Находим текущие день/месяц/год
For /F "Tokens=1 Delims=." %%i In ('WMIC OS Get LocalDateTime^|Find "."') Do Set $Time=%%i
Set $Y=%$Time:~0,4%&Set $M=0%$Time:~4,2%&Set $D=0%$Time:~6,2%
Set $M=%$M:~-2%&Set $D=%$D:~-2%
:: Создаем каталог/делаем архив
XCopy /S/E/D/C/Q %$SRC%\* %$DST%\%$D%.%$M%.%$Y:~-2%\
:: Ограничиваем количество архивов
For /F "Delims=" %%i In ('DIR /B/O:-D/A:D %$DST%\??.??.??') Do (
Set /A $OLD-=1
If !$OLD! LSS 0 RD /S/Q "%$DST%\%%i"
)
P.S. при использовании последнего скрипта нельзя вручную добавлять/изменять содержимое архивных каталогов, иначе их дата будет заменена на текущую и работа скрипта нарушится