![]() |
Удалить все файлы из папки кроме нужных
В папку каждый день записываются новые файлы. Требуется в конце каждого месяца удалить все файлы, кроме файлов за первый день месяца (первым днем может быть как 1-е число, так и 2-е) Как это реализовать?
|
Sirimika, от чего плясать?.. от даты копирования на диск, даты изменения (см. описание ключа /T из "HELP DIR") или дату можно выдернуть из имени файла?.. просто все эти даты могут существенно отличаться друг от друга... например, если архивирование начать сегодня вечером, то закончиться оно может завтра утром, а на сетевую шару файл архива может попасть и вовсе послезавтра (в зависимости от скорости канала и т.д.)
|
В названии файла дата имеется и она совпадает с датой изменения документа, так что смотреть можно по любой. Формат даты в названии xxxx-20101207.bak.
xxxx - это собственно название файла дата соответственно получается в формате гмд |
Код:
@Echo Off |
Цитата:
|
Цитата:
* - любые символы в любом количестве, например, Ваши xxxx- заменяются одной этой звездочкой %Date:~6,4% - текущий год (4 цифры) %Date:~3,2% - текущий месяц (2 цифры) 01 - первое число месяца В итоге получаем : "e:\Temp\1\*20101101.bak" |
еще наверно глупый вопрос задам.
Почему значения именно 6 и 3? |
Код:
Формат переменной %Date% для русской локализации - 09.11.2010 |
еще вопрос возникает. Всегда должно оставаться три файла, например:
базаА-20101207.bak базаБ-20101207.bak базаС-20101207.bak. Но проблема может быть в том, что одна из баз сделает бэкап например следующим днем(изменят расписание или еще что-нить), если воспользоваться скриптом, который сейчас, то у меня останется только 2 файла. А надо чтобы всегда было со всех баз, даже если у них разница в день или несколько дней. У меня всегда должны быть быкапы всех трех баз от начала месяца |
Цитата:
Код:
@echo off |
в таком случае он удаляет только то, что в текущем месяце, а мне надо еще удалить все прошлые записи
|
Sirimika, да нет, для каждого ключа (имя файла без последних двух цифр
Код:
базаA-20101107.bak - оставить |
amel27, это я поняла. В итоге получим, бэкап с каждой базы за первое число каждого месяца. Но мне требуется получить только за текущий месяц.
У меня лежит куча бэкапов за различные месяца, мне надо чтобы в конце месяца отработал батник и удалил все кроме 3-х бекапов каждой базы текущего месяца. Пример того что должно остаться: базаA-20101107.bak базаБ-20101108.bak базаС-20101107.bak То что останется если отработает этот батник: базаA-20101107.bak базаБ-20101108.bak базаС-20101107.bak базаA-20101007.bak базаБ-20101008.bak базаС-20101007.bak базаA-20100907.bak базаБ-20100908.bak базаС-20100907.bak |
Цитата:
Код:
@echo off |
Добрый день.
Я наверно опять с глупым вопросом, но не могли бы вы пояснить один момент: переменная $b принимает такие значения как $b=$_mysql- ($_psql-, $_www-) На этапе Код:
if defined !$b! del "%%a" Код:
set "!$b!=%%a" Не понимаю когда $b становиться опять не определена, почему остаются все три файла mysql, psql, www, а не один mysql Буду очень признательна за подробный ответ. |
Цитата:
Есть переменная $b, мы определяем ее значение: Код:
set "$b=name1" Код:
if defined $b ... Код:
if defined !$b! ... Соответственно эта строка: Код:
set "!$b!=%%a" |
gora, огромное спасибо. Теперь все стало понятно и просто =)
|
Время: 17:15. |
Время: 17:15.
© OSzone.net 2001-