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

Компьютерный форум 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

 

Ветеран


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

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


Цитата sancher:
Надеюсь всё понятно написал. »
Туманно.

Отправлено: 19:03, 20-03-2017 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Ветеран


Contributor


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

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


sancher, Экий Вы путаник
1. Нужно собрать файлы по году (взять год времени создания файла), имя результирующего архива: год.zip. Куда поместить этот архив.
2. Не кажется ли Вам, что заархивированные файлы надо удалить?
3. А файлы в архиве хранить с путями?
4. имя результирующего архива: год.zip - а формат архива тоже zip?. Не уверен, но, похоже, 7zip не умеет форматировать в формате Zip.
И вообще, с RARом было бы проще.

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


Последний раз редактировалось megaloman, 20-03-2017 в 21:22.


Отправлено: 20:04, 20-03-2017 | #3


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


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

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


Iska, megaloman, прошу прощения, словесность - не мой конёк )
megaloman, все вопросы по делу, спасибо.
1. Архив оставить в исходной папке имяпапки_log
2. Заархивированные файлы log действительно нужно удалить после успешного сжатия.
3. Нет, файлы нужно хранить без путей. Открыл архив, а внутри просто файлы.
4. Формат архива zip, который можно просмотреть встроенными средствами Windows. Если правильно помню, у 7zip это опция -tzip.
C rar-ом проще, но он денег стоит )

Отправлено: 08:47, 21-03-2017 | #4


Ветеран


Contributor


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

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


Код: Выделить весь код
@Echo Off
cls

Set "BoxIn=Z:\Data"

Set "MDir=*_logs"
Set "MFil=*.log"

Set Arc="C:\Program Files\7-Zip\7z.exe" a -tzip -sdel

FOR /F "usebackq delims=" %%d IN (`Dir "%BoxIn%\%MDir%" /S /B /A:D 2^>nul`) DO (
	FOR /F "usebackq delims=" %%f IN (`Dir "%%d\%MFil%" /B /A:-D /O-D /T:C 2^>nul`) DO Call :ArcOut "%%d\%%f"
)

pause
GoTo :Eof

:ArcOut
        FOR /F "tokens=1 delims= " %%i IN ("%~t1") DO Set TFile=%%i
        If "%TFile%"=="%Date%" GoTo :Eof
	%Arc% "%~dp1%TFile:~-4%" %1
В формате отображения даты, прописанном в системе, год должен быть в формате ГГГГ и быть последним

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


Последний раз редактировалось megaloman, 21-03-2017 в 10:26.

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

Отправлено: 09:43, 21-03-2017 | #5


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


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

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


megaloman, большое спасибо
есть вопрос
Set "BoxIn=Z:\Data" - Z:\Data - это корневая папка, в которой мы работаем?
если так, то почему BoxIn нигде дальше не используется?
я запустил ваш скрипт в таком виде, но он ничего не делает

Последний раз редактировалось sancher, 21-03-2017 в 10:45.


Отправлено: 09:58, 21-03-2017 | #6


Ветеран


Contributor


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

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


sancher, Виноват, был невнимателен. Код исправил в двух местах. Пропишите вместо Z:\Data "папку, в которой куча разных подпапок, часть из которых называется имя_logs".

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

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

Отправлено: 10:21, 21-03-2017 | #7


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


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

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


megaloman, супер!
мегабольшое человеческое спасибо за вашу помощь!
я бы такой скрипт рожал минимум день-два, а может и больше
а может вообще бы не осилил
так что очень сильно выручили
ещё раз благодарю!

Отправлено: 10:35, 21-03-2017 | #8


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


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

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


Уважаемый megaloman, помогите, пожалуйста, с другой версией скрипта.
У меня есть папка, в которой большое число других папок, содержащих папки и файлы.
Папки имеют названия на русском и на английском языке.
Задача: нужно скриптом зайти в каждую папку-подпапку (во все папки в дереве) и архиватором 7zip
с уровнем сжатия 1-Скоростной сжать файлы *.log и log*.txt в один архив с именем папки, содержащей эти файлы. После чего исходные файлы удалить.
И было бы здорово иметь 2 версию этого же скрипта: архивировать файлы *.log и log*.txt
в одной папке в отдельные архивы с именем файла, после чего исходные файлы удалить.

Отправлено: 16:32, 22-01-2022 | #9


Ветеран


Contributor


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

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


Цитата:
в один архив с именем папки, содержащей эти файлы
Код: Выделить весь код
@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
	If Not Exist "%~1\%Mask1%" If Not Exist "%~1\%Mask2%" Exit /B
	%ARC% "%BoxOut%\%~nx1.zip" "%~1\%Mask1%" "%~1\%Mask2%"
Exit /B
Пропишите свои пути, сохраните в 866 кодировке.

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


Последний раз редактировалось megaloman, 22-01-2022 в 18:40.

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

Отправлено: 18:30, 22-01-2022 | #10



Компьютерный форум 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




 
Переход