|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] чистка папки по заданной маске |
|
CMD/BAT - [решено] чистка папки по заданной маске
|
Пользователь Сообщения: 99 |
Профиль | Отправить PM | Цитировать
Здравствуйте.
Прошу помощи. Скрипт бекапера В папке e:\backup_dir создаются папки \20170101_11_53_name_year\ - беки создаются раз в 1-12 месяцев \20201205_10_23_name_small\ - беки создаются каждый день ... внутри файлы, с одинаковыми названиями После создания, проводится чистка старых файлов и папок. Соответственно, чистка "forfiles за Х дней" - чистится всё: И годовой бекап теряется при создании каждодневного... ВЫВОД: Нужна чистка папки по заданной маске (например *_year ) Вариант А. - плох: полюбому чистятся все каждодневные и годовые файлы... - а сделать: работа по маскам директорий, из которых будут удаляться старые файлы, а после и сами папки... - не имею представления как! Скрытый текст
@ECHO OFF chcp 866 SET BKUP_DelPath=е:\backup_dir SET BKUP_DelLogs=е:\backup_dir\Deleted.log SET BKUP_Max_Days=7 forfiles /p "%BKUP_DelPath%" /s /m * /D -%BKUP_Max_Days% /C "cmd /c del /q /s @path" >> %BKUP_DelLogs% FOR /F "usebackq delims=" %%d IN (`2^>nul Dir "%BKUP_DelPath%" /S /B /A:D ^|Sort /R`) DO 2>nul Rd "%%d"&&>>"%BKUP_DelLogs%" Echo "%%d" echo pause and end PAUSE >nul Вариант B. Решение находит папки по маске и чистить в них файлы +сами папки по маске (рабочее: хоть и пишет "ОШИБКА: не удается найти указанный файл") @ECHO OFF chcp 866 SET BKUP_DelPath=е:\backup_dir SET BKUP_DelLogs=е:\backup_dir\Deleted.log SET BKUP_Max_Days=7 forfiles /S /P "%BKUP_DelPath%" /M *_base /D -%BKUP_Max_Days% /C "cmd /C if @isdir == TRUE (rd /S /Q @path) else (del /F /A @path)" >> "%BKUP_DelLogs%" echo pause and end PAUSE >nul Однако, Сколько методом тыка(знаний не хватает) не пытался сделать вывод в лог - не получалось Хотя пример и найден на просторах буржунета, и вроде у них работает... - но у меня нет. Очень прошу помощи: а. с правкой варианта #А. - под задачу работы с масками или б. с вариантом #В. - настроить вывод в лог (если такое возможно) ЗАРАНЕЕ ОГРОМНОЕ СПАСИБО! PS простым решением было бы создание субпапок e:\backup_dir\_year\ e:\backup_dir\_smal\ но вроде как моё ядро бекапера порушится/переписывать а главное, когда все папки с датами в одной месте - то наглядно, всё видно, оценка, анализ... |
|
Отправлено: 09:17, 29-10-2020 |
Ветеран Сообщения: 2703
|
Профиль | Отправить PM | Цитировать blacks2, Давайте не будем мыслить линейно и привязываться к датам. Допустим, надо хранить 3 последних годовых бэкапа и 7 ежедневных. Зачем возиться с файлами, когда у Вас порядок с именованием папок, будем выводить имена папок по имени в соответствии с маской в обратном порядке и удалим все папки, кроме указанного количества последних.
@Echo Off Call :DelOld "Z:\Box_Arc" "*_11_53_тра ля ля_ку_ку_year" 3 "e:\Deleted.log" Call :DelOld "Z:\Box_Arc" "*_11_53_тра ля ля_ку_ку_small" 7 "e:\Deleted.log" Exit /B :DelOld FOR /F "usebackq skip=%3 delims=" %%d IN (`2^>nul Dir "%~1\%~2" /B /A:D /O:-N`) DO 2>nul Rd /S /Q "%~1\%%d" &&>>%4 Echo "%~1\%%d" Exit /B "Имя папки с подпапками бэкапов" "маска подпапок с файлами бэкапов" "количество хранимых подпапок по маске" "путь к файлу лога" |
------- Последний раз редактировалось megaloman, 29-10-2020 в 16:30. Отправлено: 16:14, 29-10-2020 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Пользователь Сообщения: 99
|
Профиль | Отправить PM | Цитировать Цитата megaloman:
"А что, так можно было!?" 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%" |
|
Отправлено: 16:12, 30-10-2020 | #3 |
Ветеран Сообщения: 2703
|
Профиль | Отправить PM | Цитировать blacks2, дописывайте код не после exit, а перед ним в верхней части скрипта.
А в вверхней части скрипта можете eще добавлять call для других путей, масок, лог-файлов |
------- Отправлено: 16:18, 30-10-2020 | #4 |
Пользователь Сообщения: 99
|
Профиль | Отправить PM | Цитировать Цитата megaloman:
Работает! |
||
Отправлено: 20:47, 05-11-2020 | #5 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - Перемещение файлов по маске с созданием папки по дате в названии файла | AndreH | Скриптовые языки администрирования Windows | 5 | 08-08-2018 09:14 | |
CMD/BAT - [решено] Удалить папки по маске | run0ut | Скриптовые языки администрирования Windows | 9 | 21-03-2017 01:27 | |
CMD/BAT - Копирование файлов в папки по маске файла и маске папки (BAT) | skyskiff | Скриптовые языки администрирования Windows | 7 | 20-09-2015 22:41 | |
CMD/BAT - [решено] Переименование по заданной маске bat | Boiston | Скриптовые языки администрирования Windows | 3 | 18-03-2015 01:15 | |
CMD/BAT - [решено] Удаление по маске, кроме папки исключения. | serjei | Скриптовые языки администрирования Windows | 27 | 18-02-2012 03:42 |
|