|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - BAT-ник для архивации файлов в нескольких папках |
|
CMD/BAT - BAT-ник для архивации файлов в нескольких папках
|
Новый участник Сообщения: 4 |
Профиль | Отправить PM | Цитировать Здравствуйте,
прошу помощи форумчан, т.к. я не могу придумать такой батник, опыта совсем минимум в этом. Итак задача: есть папка DATA, в ней много папок с названиями в 7 цифр - это серийные номера, они не по порядку, разнобой и в общем всяко разно, но обязательно 7 цифр и только 7 символов. в каждой папке есть несколько файлов с именем вида серийник-yymmdd.bin Необходимо, чтобы архиватор создавал архивы отдельно для каждого серийника, на какой-либо год, например за 2020. Нужно за один год конкретный, на следующий год можно будет просто цифру в батнике поменять. Желательно чтоб результат-архив имел имя серийник-yy.zip (или rar как получиться не знаю, 7z на той машине нету) Результат может оставаться в этой же папке или складываться в какую-либо одну - не принципиально. |
|
Отправлено: 12:25, 28-02-2023 |
Ветеран Сообщения: 2708
|
Профиль | Отправить PM | Цитировать Цитата Marker13:
Серийник в имени папки и серийник в имени файла это одно и то же? Вариант @Echo Off cls Set "BoxIn=Z:\Box_In\Data" Set "BoxOut=Z:\Box_Arc" Set "Mask=-[0-9][0-9][0-1][0-9][0-3][0-9]\.bin$" Set Arc="C:\Program Files\WinRar\Rar.exe" u -ep Set "ArcExt=zip" FOR /F "usebackq delims=" %%f In (`2^>nul Dir "%BoxIn%" /B /S /A:-D ^|FindStr /I /E /R /C:"%Mask%"`) DO ( Set "Name=%%~nf" Call Set "yy=%%Name:~-6,2%%" Call Set "Name=%%Name:~0,-7%%" >nul Call %Arc% "%BoxOut%\%%Name%%-%%yy%%.%ArcExt%" "%%f" ) Pause Exit /B |
|
------- Последний раз редактировалось megaloman, 01-03-2023 в 00:11. Отправлено: 21:43, 28-02-2023 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 4
|
Профиль | Отправить PM | Цитировать Здравствуйте, спасибо вам, попробую ваш вариант.
Да, серийник в имени папки и серийник в имени файла это одно и то же. Встречаются варианты типа 0035700, 0082444, 0135520, 0156859, 0389132, 0489128, 1285774, 2020567, 9014123 У вас в батнике архивируются все года? я не понял. или где мне можно задать архивировать 19-й год или 20-й? Объясню: валяются в папках куча файлов например с 19 года по текущее время. Мне нужно заархивировать например отдельно 19-й год, остальные не трогать пока. Потом по обстоятельствам например 20-й, опять же остальные не трогать. |
Последний раз редактировалось Marker13, 01-03-2023 в 08:14. Отправлено: 07:45, 01-03-2023 | #3 |
Ветеран Сообщения: 2708
|
Профиль | Отправить PM | Цитировать Marker13,год указывать не надо. При повторном запуске обновятся только архивы с изменёнными файлами. Если хочется упаковать конкретный год, можно это указать в маске файлов, непример, для 13 года
Set "Mask=-13[0-1][0-9][0-3][0-9]\.bin$" Еще раз пытаюсь уточнить: в имени папки только серийник или еще имеются символы, в каком месте имени? |
------- Последний раз редактировалось megaloman, 01-03-2023 в 09:06. Отправлено: 08:53, 01-03-2023 | #4 |
Новый участник Сообщения: 4
|
Профиль | Отправить PM | Цитировать Ааа теперь понял что это за маска, она берет часть имени после "-"
Да, мне нужно упаковать только конкретный год. Про уточнение, например: В DATA будет папка 0035700, в ней будут файлы за январь 22года: 0035700-220103.bin 0035700-220110.bin 0035700-220117.bin или другая папка 0135520, в ней будут соответственно 0135520-220103.bin 0135520-220110.bin 0135520-220117.bin и т.д. различных папок порядка 1000 понедельно или ежедневно - не важно. Повторный запуск не требуется для обновления файлов в архивах т.к. по окончании соответствующего периода (дня или недели) файл больше не изменяется никогда. Файлы которые были заархивированы нужно удалить после архивации, где поставить соответствующий ключ? И еще возник вопрос если архиватору будут попадаться папки с название отличным от серийный номер в 7 цифр (просто сторонняя информация, которая не требует архивации) - как он отреагирует? или лучше убрать ее пока временно? |
|
Последний раз редактировалось Marker13, 01-03-2023 в 09:40. Отправлено: 09:25, 01-03-2023 | #5 |
Ветеран Сообщения: 2708
|
Профиль | Отправить PM | Цитировать Marker13, после уточнения задачи, гораздо более быстрый вариант
@Echo Off cls Set "BoxIn=Z:\Box_In\Data" Set "BoxOut=Z:\Box_Arc" Set /A YY1=18, YY2=20 Set "Serial=[0-9][0-9][0-9][0-9][0-9][0-9][0-9]" Set Arc="C:\Program Files\WinRar\WinRar.exe" u -ep -ibck -df Set "ArcExt=zip" For /L %%y In (%YY1%,1,%YY2%) Do Set /A ty=%%y+100 & Call :MyArc %%ty:~-2%% Pause Exit /B :MyArc FOR /F "usebackq delims=" %%d In (`2^>nul Dir "%BoxIn%" /B /A:D ^|FindStr /I /R /C:"^%Serial%$"`) DO ( If Exist "%BoxIn%\%%d\%%d-%1????.bin" >nul %Arc% "%BoxOut%\%%d-%1.%ArcExt%" "%BoxIn%\%%d\%%d-%1????.bin" ) Exit /B rem Set "BoxIn=Z:\Box_In\Data" -исходная папка с подпапками с номерами серийников rem Set "BoxOut=Z:\Box_Arc" -куда помещаются архивы серийников за год (может совпадать с BoxIn rem Set /A YY1=18, YY2=20 -диапазон архивируемых годов rem Set "Serial=[0-9][0-9][0-9][0-9][0-9][0-9][0-9]" -маска серийника (=имя подпапки) rem Set Arc="C:\Program Files\WinRar\Rar.exe" u -ep -df -архиватор. Внимание!!! -df отвечает за УДАЛЕНИЕ исходных файлов rem Set "ArcExt=zip" -расширение файлов архива (rar или zip) Цитата Marker13:
В подпапках с серийниками не будут архивироваться файлы, которые не начинаются с серийник-yy и не имеют расширение .bin |
|
------- Последний раз редактировалось megaloman, 01-03-2023 в 11:16. Отправлено: 11:11, 01-03-2023 | #6 |
Новый участник Сообщения: 4
|
Профиль | Отправить PM | Цитировать Оооо, работает. Большое спасибо.
|
Отправлено: 14:21, 01-03-2023 | #7 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - BAT-ник для перемещения файлов в папки | Latinyanin | Хочу все знать | 1 | 13-12-2020 23:22 | |
CMD/BAT - [CMD/BAT]Автоархивация файлов в нескольких папках | romfus | Скриптовые языки администрирования Windows | 4 | 27-02-2018 19:52 | |
CMD/BAT - Bat-ник для переименования файлов по распознанному штрих-коду | Andrews-85 | Скриптовые языки администрирования Windows | 0 | 15-10-2015 10:30 | |
CMD/BAT - [решено] Нужен bat-ник для поиска и удаления файлов и папок по маске | Nun-Nun | Скриптовые языки администрирования Windows | 14 | 08-11-2014 09:53 | |
CMD/BAT - Создать bat'ник для автоматической очистки папок временных файлов каждые 2 часа | THEDOGG | Скриптовые языки администрирования Windows | 5 | 05-03-2013 18:39 |
|