Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - BAT-ник для архивации файлов в нескольких папках

Ответить
Настройки темы
CMD/BAT - BAT-ник для архивации файлов в нескольких папках

Новый участник


Сообщения: 4
Благодарности: 0

Профиль | Отправить PM | Цитировать


Здравствуйте,
прошу помощи форумчан, т.к. я не могу придумать такой батник, опыта совсем минимум в этом.
Итак задача:
есть папка DATA, в ней много папок с названиями в 7 цифр - это серийные номера, они не по порядку, разнобой и в общем всяко разно, но обязательно 7 цифр и только 7 символов.
в каждой папке есть несколько файлов с именем вида серийник-yymmdd.bin
Необходимо, чтобы архиватор создавал архивы отдельно для каждого серийника, на какой-либо год, например за 2020. Нужно за один год конкретный, на следующий год можно будет просто цифру в батнике поменять.
Желательно чтоб результат-архив имел имя серийник-yy.zip (или rar как получиться не знаю, 7z на той машине нету)
Результат может оставаться в этой же папке или складываться в какую-либо одну - не принципиально.

Отправлено: 12:25, 28-02-2023

 

Ветеран


Contributor


Сообщения: 2708
Благодарности: 1684

Профиль | Отправить PM | Цитировать


Цитата Marker13:
обязательно 7 цифр и только 7 символов. »
Приведите пример имени папки.
Серийник в имени папки и серийник в имени файла это одно и то же?
Вариант
Код: Выделить весь код
@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
Благодарности: 0

Профиль | Отправить 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


Ветеран


Contributor


Сообщения: 2708
Благодарности: 1684

Профиль | Отправить 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
Благодарности: 0

Профиль | Отправить 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


Ветеран


Contributor


Сообщения: 2708
Благодарности: 1684

Профиль | Отправить 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:
сли архиватору будут попадаться папки с название отличным от серийный номер в 7 цифр »
Архиватору не будут, эти папки будут отсеяны Dir+FindStr, можете иные, с именами не 7 цифр, не удалять.
В подпапках с серийниками не будут архивироваться файлы, которые не начинаются с серийник-yy и не имеют расширение .bin

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 01-03-2023 в 11:16.

Это сообщение посчитали полезным следующие участники:

Отправлено: 11:11, 01-03-2023 | #6


Новый участник


Сообщения: 4
Благодарности: 0

Профиль | Отправить PM | Цитировать


Оооо, работает. Большое спасибо.

Отправлено: 14:21, 01-03-2023 | #7



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - BAT-ник для архивации файлов в нескольких папках

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
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




 
Переход