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

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

Ответить
Настройки темы
CMD/BAT - [решено] Сделать скрипт с хитрым алгоритмом упаковки файлов

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


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

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

 

Ветеран


Contributor


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

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

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


Ветеран


Contributor


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

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

- в одной папке в отдельные архивы с именем файла
Код: Выделить весь код
@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

	FOR /F "usebackq delims=" %%f In (`2^>nul Dir /B /A:-D /S "%BoxIn%\%Mask1%" "%BoxIn%\%Mask2%"`) DO (
		Echo "%%f"
		>nul %ARC% "%%f.zip" "%%f"
	)
Exit /B

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

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

Отправлено: 10:01, 23-01-2022 | #13


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


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

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


megaloman
Огромное спасибо!
Всё прекрасно работает.
Надеюсь, что эти скрипты пригодятся многим людям.


p.s. отмечу лишь один момент
хотя опция -tzip не используется, по факту получаются архивы zip
поменял расширение на .7z, и архивы уменьшились в размере
поэтому если кто-то решит использовать эти скрипты, то замените .zip на .7z

Последний раз редактировалось sancher, 23-01-2022 в 20:50.


Отправлено: 11:28, 23-01-2022 | #14



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

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

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




 
Переход