![]() |
чистка папки по заданной маске
Здравствуйте.
Прошу помощи. Скрипт бекапера В папке e:\backup_dir создаются папки \20170101_11_53_name_year\ - беки создаются раз в 1-12 месяцев \20201205_10_23_name_small\ - беки создаются каждый день ... внутри файлы, с одинаковыми названиями После создания, проводится чистка старых файлов и папок. Соответственно, чистка "forfiles за Х дней" - чистится всё: И годовой бекап теряется при создании каждодневного... ВЫВОД: Нужна чистка папки по заданной маске (например *_year ) Вариант А. - плох: полюбому чистятся все каждодневные и годовые файлы... - а сделать: работа по маскам директорий, из которых будут удаляться старые файлы, а после и сами папки... - не имею представления как! :sorry: Скрытый текст
Код:
@ECHO OFF Вариант B. Решение находит папки по маске и чистить в них файлы +сами папки по маске (рабочее: хоть и пишет "ОШИБКА: не удается найти указанный файл") Код:
@ECHO OFF Однако, Сколько методом тыка(знаний не хватает) не пытался сделать вывод в лог - не получалось Хотя пример и найден на просторах буржунета, и вроде у них работает... - но у меня нет. Очень прошу помощи: а. с правкой варианта #А. - под задачу работы с масками или б. с вариантом #В. - настроить вывод в лог (если такое возможно) ЗАРАНЕЕ ОГРОМНОЕ СПАСИБО! PS простым решением было бы создание субпапок e:\backup_dir\_year\ e:\backup_dir\_smal\ но вроде как моё ядро бекапера порушится/переписывать а главное, когда все папки с датами в одной месте - то наглядно, всё видно, оценка, анализ... |
blacks2, Давайте не будем мыслить линейно и привязываться к датам. Допустим, надо хранить 3 последних годовых бэкапа и 7 ежедневных. Зачем возиться с файлами, когда у Вас порядок с именованием папок, будем выводить имена папок по имени в соответствии с маской в обратном порядке и удалим все папки, кроме указанного количества последних.
Код:
@Echo Off "Имя папки с подпапками бэкапов" "маска подпапок с файлами бэкапов" "количество хранимых подпапок по маске" "путь к файлу лога" |
Цитата:
"А что, так можно было!?" v.2.0 =) Работает!! Благадарю! Вопрос: можно ли чем-то заменить строки с Exit /B ? Поясню: После приведенного Вами (еще раз спасибо!) скрипта следом должен запускаться скрипт конвертации кодировки (#A) и 2 комманды по запуску exeшника (#B) но они не срабатывают именно из-за Exit /B Пробовал удалять, заменять на Goto, убирать /b, удалять то одну строку то другую с Exit /B - не помогло. Спасибо! #A
for %%? in ("") do chcp 1251 & cmd /d /a /c set /p=яю<NUL > .tmp
chcp 866 cmd /d /u /c type "%BKUP_11_logX%" >> .tmp chcp 1251 cmd /d /a /c type .tmp > "%BKUP_11_logX%" del .tmp #B
MSG.EXE "COMPLETED\n\nStart %run%\nFinsh %time%"
start notepad "%logX%" |
blacks2, дописывайте код не после exit, а перед ним в верхней части скрипта.
А в вверхней части скрипта можете eще добавлять call для других путей, масок, лог-файлов |
Цитата:
Работает! |
Время: 03:43. |
Время: 03:43.
© OSzone.net 2001-