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

Аватара пользователя
sancher

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

Сообщение sancher »

Всем здравствуйте.

Буду крайне признателен если кто-то сможет помочь.

Есть папка, в которой куча разных подпапок, часть из которых называется

имя_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.

Надеюсь всё понятно написал.
Аватара пользователя
megaloman

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

Сообщение megaloman »

sancher, Экий Вы путаник Изображение

1. Нужно собрать файлы по году (взять год времени создания файла), имя результирующего архива: год.zip. Куда поместить этот архив.

2. Не кажется ли Вам, что заархивированные файлы надо удалить?

3. А файлы в архиве хранить с путями?

4. имя результирующего архива: год.zip - а формат архива тоже zip?. Не уверен, но, похоже, 7zip не умеет форматировать в формате Zip.

И вообще, с RARом было бы проще.
Аватара пользователя
megaloman

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

Сообщение megaloman »

sancher, Экий Вы путаник Изображение

1. Нужно собрать файлы по году (взять год времени создания файла), имя результирующего архива: год.zip. Куда поместить этот архив.

2. Не кажется ли Вам, что заархивированные файлы надо удалить?

3. А файлы в архиве хранить с путями?

4. имя результирующего архива: год.zip - а формат архива тоже zip?. Не уверен, но, похоже, 7zip не умеет форматировать в формате Zip.

И вообще, с RARом было бы проще.
Аватара пользователя
sancher

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

Сообщение sancher »

Iska, megaloman, прошу прощения, словесность - не мой конёк )

megaloman, все вопросы по делу, спасибо.

1. Архив оставить в исходной папке имяпапки_log

2. Заархивированные файлы log действительно нужно удалить после успешного сжатия.

3. Нет, файлы нужно хранить без путей. Открыл архив, а внутри просто файлы.

4. Формат архива zip, который можно просмотреть встроенными средствами Windows. Если правильно помню, у 7zip это опция -tzip.

C rar-ом проще, но он денег стоит )
Аватара пользователя
megaloman

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

Сообщение megaloman »

Код:

Код: Выделить всё

@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

В формате отображения даты, прописанном в системе, год должен быть в формате ГГГГ и быть последним
Аватара пользователя
sancher

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

Сообщение sancher »

megaloman, большое спасибо

есть вопрос

Set "BoxIn=Z:\Data" - Z:\Data - это корневая папка, в которой мы работаем?

если так, то почему BoxIn нигде дальше не используется?

я запустил ваш скрипт в таком виде, но он ничего не делает
Аватара пользователя
megaloman

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

Сообщение megaloman »

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

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

Сообщение sancher »

megaloman, супер!

мегабольшое человеческое спасибо за вашу помощь!

я бы такой скрипт рожал минимум день-два, а может и больше

а может вообще бы не осилил

так что очень сильно выручили

ещё раз благодарю!
Аватара пользователя
sancher

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

Сообщение sancher »

Уважаемый megaloman, помогите, пожалуйста, с другой версией скрипта.

У меня есть папка, в которой большое число других папок, содержащих папки и файлы.

Папки имеют названия на русском и на английском языке.

Задача: нужно скриптом зайти в каждую папку-подпапку (во все папки в дереве) и архиватором 7zip

с уровнем сжатия 1-Скоростной сжать файлы *.log и log*.txt в один архив с именем папки, содержащей эти файлы. После чего исходные файлы удалить.

И было бы здорово иметь 2 версию этого же скрипта: архивировать файлы *.log и log*.txt

в одной папке в отдельные архивы с именем файла, после чего исходные файлы удалить.
Ответить

Вернуться в «Скриптовые языки администрирования Windows»