Войти

Показать полную графическую версию : [решено] Удаление созданных папок и файлов по времени


Страниц : 1 [2]

amel27
20-08-2009, 12:37
Требуется из папки сделать выборку файлов старше например 6 дней с даты создания »скрипт на базе поста #2 (http://forum.oszone.net/post-1158720-2.html) - формирует список TXT-файлов старше $OLD дней:
@Echo Off
:: Параметры скрипта, 0 < $OLD < 29!
:: $SRC - где ищем файлы
:: $OLD - какие файлы считаем старыми
:: $LST - имя файла для списка
:: $EXT - тип файла/расширение
Set $SRC=C:\
Set $EXT=TXT
Set $LST=C:\_\Files.LST
Set $OLD=25
:: Находим текущие день/месяц/год
For /F "Tokens=1" %%i In ('WMIC OS Get LocalDateTime^,Version^|Find "."') Do Set DateTime=%%i
Set $Y=%DateTime:~0,4%
If "%DateTime:~4,1%"=="0" (Set $M=%DateTime:~5,1%) Else (Set $M=%DateTime:~4,2%)
If "%DateTime:~6,1%"=="0" (Set $D=%DateTime:~7,1%) Else (Set $D=%DateTime:~6,2%)
:: Откатываем дату назад на $OLD дней
Call :GetOldDate %$OLD%
:: Выделяем из имени исходного каталога диск и путь
If Exist "%$SRC%" For /F "Delims=" %%i In ("%$SRC%") Do Set $DRV=%%~di& Set $PTH=%%~pni\
If Not "%$PTH%"=="\\" Set $PTH=%$PTH:\=\\%
:: Получаем список файлов старше $OLD дней
If Exist "%$LST%" DEL /F/Q "%$LST%"
For /F "UseBackQ Tokens=2 Delims==" %%i In (`WMIC Path CIM_DataFile Where^
"Drive='%$DRV%' And Extension='%$EXT%' And LastModified<'%DateTime%' And Path Like '%$PTH%%%'"^
Get Name /Value^|Find "="`
) Do For /F "Delims=" %%a In ('Echo %%i') Do Echo %%a >>%$LST%
:: Выход
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%
Set DateTime=%$Y%%$M%%$D%%DateTime:~8%
GoTo :EOF

P.S. Скрипт выбирает на основе даты последней модификации, если нужна все-таки дата создания, то нужно заменить "LastModified" на "InstallDate"

Felix007
20-08-2009, 15:16
amel27, спасибо большое оч помог!!! Архивирование прокатило!!! Как выбирать файлы которые старше 29 дней, мне например нужно выбрать файлы старше 280 дней и он конечно не отрабатывает. Помоги пожалуйста!!!

megaloman
25-08-2009, 23:27
Вот скрипт, который решает Вашу задачу для любого количества дней.

Текст скрипта перенесите в блокнот, сохраните в файл с расширением .vbs, например ArcNDays.vbs
Запускайте как обычный исполнимый файл (как bat, например)

Скрипт использует ключи архиватора WinRar

-r -архивируем с поддиректориями
-df -удаляем файлы после архивации
-tb -архивируем файлы старше указанного времени

Скрипт вычисляет дату, отстоящую от текущей на указанное число дней и формирует командную строку с архиватором.
Архиватор архивирует старые файлы в указанную директорию и удаляет исходные файлы.



' Исходные данные
' ------------------------------------------------------------------------
DirRab = "D:\Проба пера\" ' Директория, откуда забираем файлы (c \ на конце)
DirArc = "D:\Проба пера.ARC\" ' Директория, куда архивируем файлы (c \ на конце)

NDaysDele = 31 ' Файлы старше NDaysDele будут заархивированы и удалены

Arc = """C:\Program Files\WinRar\WinRar.exe""" ' Путь к архиватору
' ------------------------------------------------------------------------

MDate = CStr(DateAdd("d",-NDaysDele,Date)) ' Дата отстоящая от текущей на NDaysDele дней

Set WS = CreateObject("WScript.Shell")
DateArc=Mid(MDate,7,4)+Mid(MDate,4,2)+Mid(MDate,1,2)

R = WS.Run(Arc+" a -r -df -tb"+DateArc+"0001 """+DirArc+DateArc+""" """+DirRab+"*.*""", 1, True)

Felix007
26-08-2009, 00:03
megaloman, спасибо, Winrar-ром я уже делал и у меня все отлично получилось т.к у него полно своих средств для реализации данной задачи. ЩАс вин рар пришлось удалить т.к нет лицензии и требуется реализовать это с помощью 7-zip. А вот как правильно сделать это с датой я пока не придумал...

DaTais
22-04-2013, 10:36
поднимаю тему.
Возникла проблема с правами
:: Находим текущие день/месяц/год
('WMIC OS Get LocalDateTime^|Find "."')

вот эта команда не работает, как можно упростить поиск текущей даты?




© OSzone.net 2001-2012