Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Удаление созданных папок и файлов по времени

Ответить
Настройки темы
CMD/BAT - [решено] Удаление созданных папок и файлов по времени

Старожил


Сообщения: 157
Благодарности: 3

Профиль | Отправить PM | Цитировать


Изменения
Автор: zavoruev
Дата: 03-07-2009
Всем добрый день!!!!
есть необходимость дописать скрипт, я в этом деле не мастер, но вот сейчас понадобилось.
Вот существующий
for /f "tokens=5,7,6 delims=_ " %%i in ('date /t') do (set date = %%i-%%j-%%k)
echo %date%
set new_name=%date%
echo %new_name%

Mkdir d:\Backup\%new_name%
CD /D d:\Backup\%new_name%
Xcopy d:\mazda /S /E
Суть такова, делается папка с названием даты (число, месяц, год), необходимо чтобы после отрабатывания вот этого скрипта удалялись папки недельной давности отсчетом от вновь созданного. Например:
Сегодня создалась утром папка 03.07.09, а уавтоматом удалилась 27.06.09.
Заранее всем благодарен!!!!

Отправлено: 14:32, 03-07-2009

 

Googler


Сообщения: 3665
Благодарности: 1563

Профиль | Отправить PM | Цитировать


Цитата Felix007:
Требуется из папки сделать выборку файлов старше например 6 дней с даты создания »
скрипт на базе поста #2 - формирует список 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"

Последний раз редактировалось amel27, 21-08-2009 в 13:10. Причина: оформление, ошибка


Отправлено: 12:37, 20-08-2009 | #21



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


Сообщения: 3
Благодарности: 0

Профиль | Отправить PM | Цитировать


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

Последний раз редактировалось Felix007, 25-08-2009 в 19:32.


Отправлено: 15:16, 20-08-2009 | #22


Ветеран


Contributor


Сообщения: 2733
Благодарности: 1698

Профиль | Отправить PM | Цитировать


Вот скрипт, который решает Вашу задачу для любого количества дней.

Текст скрипта перенесите в блокнот, сохраните в файл с расширением .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)

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Отправлено: 23:27, 25-08-2009 | #23


Новый участник


Сообщения: 3
Благодарности: 0

Профиль | Отправить PM | Цитировать


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

Отправлено: 00:03, 26-08-2009 | #24


Новый участник


Сообщения: 3
Благодарности: 0

Профиль | Отправить PM | Цитировать


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


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

Отправлено: 10:36, 22-04-2013 | #25



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Удаление созданных папок и файлов по времени

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Удаление папок по критериям jentoso Скриптовые языки администрирования Windows 16 17-06-2009 11:38
Любой язык - [решено] удаление файлов по маске, созданных за прошлые сутки BRAT2 Скриптовые языки администрирования Windows 1 06-04-2009 08:51
VBS/WSH/JS - [решено] Удаление файлов созданных ранее текущей даты на неделю KillHunter Скриптовые языки администрирования Windows 5 06-03-2009 12:23
[решено] Удаление файлов и папок ArGoth Автоматическая установка Windows 2000/XP/2003 1 26-05-2008 18:03
Удаление всех папок и файлов из папки c:\Temp DIKPro Microsoft Windows NT/2000/2003 10 15-08-2006 16:20




 
Переход