|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Сделать скрипт с хитрым алгоритмом упаковки файлов |
|
CMD/BAT - [решено] Сделать скрипт с хитрым алгоритмом упаковки файлов
|
Новый участник Сообщения: 44 |
Профиль | Отправить PM | Цитировать Всем здравствуйте.
Буду крайне признателен если кто-то сможет помочь. Есть папка, в которой куча разных подпапок, часть из которых называется имя_logs. Задача: нужно зайти скриптом в каждую из этих подпапок имя_logs, в которой лежат файлы с расширениями log, zip, файлы zip (старые) не трогать, а файлы log необходимо упаковать в один файл, точнее не в один а в несколько. Нужно собрать файлы по году (взять год времени создания файла), имя результирующего архива: год.zip то есть если есть файлы log, созданные в 2015, 2016 годах, то все log файлы за 2015 год собрать в один архив 2015.zip, а за 2016 в 2016.zip. Да, самое главное. Нужно не брать последний лог файл (за текущий день), а брать начиная со вчерашнего и ранее. И будет здорово, если можно реализовать дозапись новых файлов в 2017 году. То есть пакуем все файлы за 2017 год кроме сегодняшнего в файл 2017.zip, если запустим скрипт на следующий день, то добавляем оставшийся файл log в архив 2017.zip. Да, идеально будет, если использовать 7zip. Надеюсь всё понятно написал. |
|
Отправлено: 17:46, 20-03-2017 |
Ветеран Сообщения: 2708
|
Профиль | Отправить PM | Цитировать Цитата sancher:
@Echo Off Set "BoxIn=Z:\Box_Arc" Set "Mask1=*.log" Set "Mask2=log*.txt" Set "BoxOut=Z:\Box_Out" Set ARC="C:\Program Files\7-Zip\7z.exe" a -mx1 -sdel Call :MyArc "%BoxIn%" FOR /F "usebackq delims=" %%d In (`2^>nul Dir /B /A:D /S "%BoxIn%\"`) DO ( Call :MyArc "%%d" ) Exit /B :MyArc FOR /F "usebackq delims=" %%f In (`2^>nul Dir "%~1\%Mask1%" "%~1\%Mask2%" /B /A:-D`) DO ( %ARC% "%BoxOut%\%%f.zip" "%~1\%%f" ) Exit /B @Echo Off Set "BoxIn=Z:\Box_Arc" Set "Mask1=*.log" Set "Mask2=log*.txt" Set "BoxOut=Z:\Box_Out" Set ARC="C:\Program Files\7-Zip\7z.exe" a -mx1 -sdel FOR /F "usebackq delims=" %%f In (`2^>nul Dir /B /A:-D /S "%BoxIn%\%Mask1%" "%BoxIn%\%Mask2%"`) DO ( >nul %ARC% "%BoxOut%\%%~nxf.zip" "%%f" ) Exit /B |
|
------- Последний раз редактировалось megaloman, 22-01-2022 в 21:44. Отправлено: 18:54, 22-01-2022 | #11 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 44
|
Профиль | Отправить PM | Цитировать megaloman, большое спасибо, но видимо я немного неправильно сформулировал задачу.
1. " в один архив с именем папки, содержащей эти файлы " Я указал папку BoxIn, в качестве BoxOut указал ту же папку. Что получилось: 1. В папке BoxIn есть папка 1, в которой лежали файлы *.log В итоге после работы скрипта папка 1 стала пустой (хотя там должен был оказаться файл 1.7z) 2. В папке BoxIn есть папка 2, в которой лежали файлы *.log и папка 1 с файлами log*_.txt В итоге после работы скрипта папка 2 стала содержать только пустую папку 1. То есть в итоге у меня в корне BoxIn оказалось 2 архива 1.zip и 2.zip и 2 пустые папки 1 и 2 (папка 2 с пустой папкой 1). Что должно было получиться: в папке BoxIn должны были остаться папки 1 и 2, в папке 1 должен был быть архив 1.zip с файлами *.log. В папке 2 должен был быть архив 2.zip c фалйами *.log, которые лежали в этой папке, и папка 1 с архивом 1.zip внутри, содержащим файлы log*.txt 2. " в одной папке в отдельные архивы с именем файла " Сразу взял короткий вариант и получлось примерно то же самое, что и в пункте 1 То есть в итоге у меня в корне BoxIn оказалось 2 пустые папки 1 и 2 (папка 2 с пустой папкой 1) и 18 файлов zip с файлами, которые лежали в исходной BoxIn и подпапках. |
Последний раз редактировалось sancher, 22-01-2022 в 23:52. Отправлено: 23:40, 22-01-2022 | #12 |
Ветеран Сообщения: 2708
|
Профиль | Отправить PM | Цитировать Цитата sancher:
Если заархивированные файлы надо оставить в тех же папках, где находились исходные, то: - в один архив с именем папки, содержащей эти файлы @Echo Off Set "BoxIn=Z:\Box_Arc" Set "Mask1=*.log" Set "Mask2=log*.txt" Set ARC="C:\Program Files\7-Zip\7z.exe" a -mx1 -sdel Call :MyArc "%BoxIn%" FOR /F "usebackq delims=" %%d In (`2^>nul Dir /B /A:D /S "%BoxIn%\"`) DO ( Call :MyArc "%%d" ) Exit /B :MyArc If Not Exist "%~1\%Mask1%" If Not Exist "%~1\%Mask2%" Exit /B Echo %1 >nul %ARC% "%~1\%~nx1.zip" "%~1\%Mask1%" "%~1\%Mask2%" Exit /B - в одной папке в отдельные архивы с именем файла |
|
------- Отправлено: 10:01, 23-01-2022 | #13 |
Новый участник Сообщения: 44
|
Профиль | Отправить PM | Цитировать megaloman
Огромное спасибо! Всё прекрасно работает. Надеюсь, что эти скрипты пригодятся многим людям. p.s. отмечу лишь один момент хотя опция -tzip не используется, по факту получаются архивы zip поменял расширение на .7z, и архивы уменьшились в размере поэтому если кто-то решит использовать эти скрипты, то замените .zip на .7z |
Последний раз редактировалось sancher, 23-01-2022 в 20:50. Отправлено: 11:28, 23-01-2022 | #14 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - [решено] Как переделать скрипт удаления папок, на скрипт удаления файлов | ufooo | Скриптовые языки администрирования Windows | 2 | 02-06-2015 12:22 | |
Java - Помогите с алгоритмом | nastr | Программирование и базы данных | 9 | 27-11-2013 16:31 | |
7 / 2008 R2 - Защита Windows 7 от повторной упаковки утилитой sysprep | Ralik | Автоматическая установка Windows 11 / 10 / 8 / 7 / Vista | 2 | 01-06-2011 17:31 | |
помогите с алгоритмом решения задачи | bool | Хочу все знать | 2 | 14-06-2008 18:43 | |
Подскажите, как сделать скрипт | BarsMaster | Вебмастеру | 4 | 26-01-2007 23:15 |
|