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

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

Ответить
Настройки темы
CMD/BAT - Автоматическое удаление файлов

Пользователь


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

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


День добрый. Поскажите решение данной задачи :раз в сутки очистить папку "Obmen". Заархивировать и скопировать содержимое папки в паку "Arh" (на всякий случай ) и удалить содержимое (папки и файлы). Желательно с помощью bat-ника
Спасибо.

Отправлено: 14:14, 24-08-2009

 

Аватара для verna

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


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

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


посмотрите команды copy и del
консольно архивировать может любой современный архиватор

-------
ООО "ВЕРНА" - ИТ решения для малого и среднего бизнеса
http://verna.com.ua/spec/IT-infrastr..._optimization/


Отправлено: 13:24, 25-08-2009 | #2



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

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


Ветеран


Contributor


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

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


Идея решения - используем распространённый архиватор WinRar, у которого есть ключи
-df - архивировать с удалением файлов
-tb - архивировать файлы старше указанного времени
Берём системную дату, преобразуем её в вид, пригодный для архиватора, запускаем архиватор с указанными ключами для архивации файлов на начало текущих суток.
При желании анализируем наличие архива (строка с If) и позволяем работать архиватору не чаще раза в сутки.
Вот батник:

rem ---------------------------------------------------------------
rem Надо настроить:
rem Gde - Папка, где берём файлы для архивирования и удаления
rem Kuda - Папка, где храним архивы
rem TDate - Дата в формате ГГГГММДД
rem В приведенном батнике дата преобразуется из системной переменной %Date%
rem Для Win XP или 2003 %Date% по умолчанию выдаётся в формате ДД.ММ.ГГГГ
rem При необходимости написать своё преобразование

Set Gde=D:\Obmen
Set Kuda=D:\Obmen.arh

Set TDate=%date:~6,4%%date:~3,2%%date:~0,2%

If Exist %Kuda%\%TDate%.rar GoTo End

MD %Kuda%

"%programfiles%\WinRar\Winrar.exe" a -r -df -tb%TDate%0001 %Kuda%\%TDate%.rar %Gde%\*.*

:End
rem ---------------------------------------------------------------

Обратите внимание, что содержимое папки архивируется с подпапками (ключ -r). Поэтому архивную папку нельзя помещать внутрь архивируемой папки.
Не храните бат-файл внутри архивируемой папки - архиватор в конце концов его удалит.
И, наконец, если WinRar установлен не в Program Files, напишите правильный к нему путь

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


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

Это сообщение посчитали полезным следующие участники:

Отправлено: 19:13, 25-08-2009 | #3


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


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

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


И лучше использовать бесплатный 7-zip

Отправлено: 23:56, 28-08-2009 | #4


Пользователь


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

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


Можно поподробней объяснить, что значит строки:
Set TDate=%date:~6,4%%date:~3,2%%date:~0,2%
"%programfiles%\WinRar\Winrar.exe" a -r -df -tb%TDate%0001 %Kuda%\%TDate%.rar %Gde%\*.*
Не понятно что за числа

Отправлено: 09:27, 29-08-2009 | #5


Ветеран


Contributor


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

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


Системная переменная %Date% принимает значение текущей системной даты.
По умолчанию в Win XP и 2003 это дд.мм.гггг. В командном окне можете набрать Echo %Date% и посмотреть, что получится.
Условно изображу дату в виде номеров позиций символов слева направо: 01.34.6789
Итак, выражение %date:~6,4% вырежет из символьной строки даты символы, начиная с 6 позиции в количестве 4 штуки, т е 6789, то есть гггг.
Аналогично для дня и месяца.
В результате я присвоил переменной TDate литерал вида ггггммдд, которая понадобится мне для подстановки в командную строку архиватора WinRar
Если у Вас дата выдаётся в другом формате, соответственно надо написать своё выражение для TData, чтобы получить в результате ггггммдд.
(подробнее наберите в командном окне Set /? For /?)

Если в командном окне наберёте
echo %programfiles%
полУчите путь папки Program Files (у меня это C:\Program Files), куда по умолчанию устанавливаются общесистемные программы, в частности, WinRar.
Если архаватор в другом месте, естественно надо вместо %programfiles% указать реальный путь.

Таким образом строка "%programfiles%\WinRar\Winrar.exe" выдаёт полный путь к архиватору. Кавычки - путь с пробелами должен быть в кавычках. Без пробелов - кавычки тоже не помешают.

"C:\Program Files\WinRar\Winrar.exe"

Смысл команд и ключей смотрите в справочной системе WinRar -вызовите WinRar-меню Справка - Содержание
команда a -добавить файлы в архив
ключ -r - c подпапками
ключ -df - с удалением файлов после архивации
ключ -tb - архивировать файлы, модифицированные до указанной даты
Один из требуемых форматов даты ггггммддЧЧММСС

Выражение %TDate%0001, например, 31 августа 2009 года будет иметь вид 200908310001
Заархивируются файлы изменённые до 00 час 1 мин 31 августа 2009.
В принципе, можно написать %TDate%000001, тогда заархивируются файлы изменённые до 00 час 00 мин 01 сек 31 августа 2009.

Файлы будут архивироваться в файл %Kuda%\%TDate%.rar (лучше написать "%Kuda%\%TDate%.rar"),
в приведенном примере для указанной мной даты получим архивный файл D:\Obmen.arh\20090831.rar

Файлы будут заархивированы из папки %Gde%\*.* (опять же, если в именах пробелы, лучше написать "%Gde%\*.*"),
то есть в примере это D:\Obmen
Цитата:
И лучше использовать бесплатный 7-zip
C точки зрения бесплатности - да. Удобства - увы, это не так. Не помню кому в личной переписке я решил задачу с помощью 7Zip, но это уже не с помощью bat-файла, а VBS - скрипта. Да и то, там сделано только для архивации файлов в папке без подпапок. К сожалению, все личные посты я удаляю практически сразу, а на домашнем компьютере у меня этого скрипта нет, поэтому пока его не привожу, на работу попаду через несколько дней и, дай бог, там скрипт сохранился. Можно напрячься и написать архивацию и удаление с подпапками, но для себя я не вижу пока в нём смысла.
Здесь я решал что-то похожее с помощью VBS-скрипта, но, опять же, привлекая WinRar

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

Это сообщение посчитали полезным следующие участники:

Отправлено: 12:08, 29-08-2009 | #6


Аватара для gora

Ушёл из жизни


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

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


Цитата alnimo:
Можно поподробней объяснить, что значит строки:
Set TDate=%date:~6,4%%date:~3,2%%date:~0,2% »
Переменная %date% "разрезается" на кусочки и складывается в нужном порядке.
Для подробностей выполните Set /?
Цитата alnimo:
-tb%TDate%0001 »
Цитата справка WinRAR:
Дата указывается в следующем формате: ГГГГММДДЧЧММСС. В поле даты допускается вставлять символы-разделители ('-' или ': ') и не указывать оставшиеся поля. Например, следующий ключ будет правильным: -tb2001-11-20

Если говорить точнее, при внутренней обработке RAR будет трактовать вышеуказанный ключ как -tb20011120000000, что означает: "файлы, изменённые до 0 часа 0 минут 0 секунд 20 ноября 2001 года" (т.е. сама эта дата в заданный диапазон времени не входит).
Это сообщение посчитали полезным следующие участники:

Отправлено: 12:15, 29-08-2009 | #7


Ветеран


Contributor


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

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


Вот VBS скрипт, решающий похожую задачу, но с архивированием в 7z
Код: Выделить весь код
' Перемещаем файлы старше указанного количества дней по маске 
' из одной папки (без подпапок) в другую - промежуточную
' Упаковываем промежуточную папку с именем сегодняшней даты
' Чистим промежуточную папку

' Исходные данные ----------------

InBox = "H:\Delete\Проба пера"        ' Откуда перемещаем
OutTmp = "H:\Delete\Проба пера\Tmp"   ' Куда перемещаем (TMP)
OutArc = "H:\Delete\Work"             ' Куда архивируем

NDays = 60                            ' Файлы старше количества дней
Maska="^.*\.txt$"                     ' Маска файлов (здесь *.txt)

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

' --------------------------------

Set FSO = CreateObject("Scripting.FileSystemObject")
Set WS = CreateObject("WScript.Shell")
Set RE = New RegExp
Set InDir = FSO.GetFolder(InBox)
Set AllFiles = InDir.Files

RE.Pattern = Maska
RE.IgnoreCase = True

For Each iFile In AllFiles                 ' Цикл по файлам в папке 

    iName=iFile.Name                       ' Берём имя файла из папки
    iDate = iFile.DateLastModified         ' Берём дату модификации файла 
'    iDate = iFile.DateCreated             ' Берём дату создания файла (если нужно убрать комментарий!)

    If RE.Test(iName) And DateDiff("d", iDate, Date) > NDays Then    ' Соответствует ли оно маске и дате
       iFile.Move OutTmp+"\"                                                ' Перемещаем
    End If

Next

' Архивируем Tmp c именем архива = дате (я предпочитаю формат ГГГГММДД) 

NArc = CStr(Date) 
ArcFile = OutArc+"\"+Mid(NArc,7,4)+Mid(NArc,4,2)+Mid(NArc,1,2)+".7z"      ' Имя архивного файла с путём

NArc = " a """+ArcFile+""""
NTmp = " """+OutTmp++"\*.*"""

a = WS.Run(""""+Arc+""""+NArc+NTmp,1,True)

' Удаляем файлы в TMP если архив существует

If FSO.FileExists(ArcFile) Then FSO.DeleteFile OutTmp+"\*.*", True
Это сообщение посчитали полезным следующие участники:

Отправлено: 12:27, 01-09-2009 | #8


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


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

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


а как сделать чтобы батник работал с файлами только старше 3х месяцев, остальные файлы не трогал?
например сейчас сентябрь, батник бы заархивировал и удалил бы потом все файлы которые были созданы до июня

Отправлено: 10:57, 21-09-2011 | #9


Ветеран


Contributor


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

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


Запустите WinRar, вызовите справку.
Цитата:
Ключ -TO<время> — обрабатывать файлы более старые, чем указанный период времени
Используйте этот ключ, если нужно обработать только те файлы, дата изменения которых не попадает в указанный период времени, т.е. они были созданы/изменены более давно, чем определяет параметр <время >. Время указывается в следующем формате:

[<дни>d] [<часы>h] [ <минуты>m] [<секунды>s]

Например, для обработки файлов, изменённых более 15 дней назад, используйте ключ -to15d, а для обработки файлов, изменённых более чем 2,5 часа назад, используйте -to2h30m.
Если не устраивает WinRar - пишите.

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

Это сообщение посчитали полезным следующие участники:

Отправлено: 11:17, 21-09-2011 | #10



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Службы - Автоматическое удаление очереди при печати icold Microsoft Windows 2000/XP 0 15-12-2009 13:26
Разное - CloneSpy - автоматическое/полуавтоматическое удаление дубликатов файлов ShaRP Программное обеспечение Windows 0 25-05-2008 19:54
Автоматическое удаление приложений.. mikola1983 Автоматическая установка приложений 4 29-09-2007 11:05
Автоматическое удаление KAV 5.0 Personal djoniAg Автоматическая установка приложений 3 15-02-2007 16:15
[решено] Автоматическое удаление файлов из директорий BigMac Microsoft Windows NT/2000/2003 19 29-05-2005 22:32




 
Переход