Ru-Board.club
← Вернуться в раздел «Программы»

» 7-Zip / 7z (часть 2)

Автор: fakel33
Дата сообщения: 09.07.2016 16:41
Помогите разобраться с архиватором.

1. Была поставлена задача

Есть больщое количество файлов, расположеннох в разных каталогах
d:\Проекты\
d:\Проекты\Проект001\
файл1
файл2
файл3
d:\Проекты\Проект001\Доработка\
файл4
файл5
d:\Проекты\Проект001\Изменения\
файл6
файл7
и т.д.
Нужно заархивировать и положить рядом с каждым файлом zip-архив (имя архива как и у файла.расширение.zip).
Как это сделать с помощью cmd?

2. Был написан cmd-файл


Код:
@echo off
set pap=d:\Проекты\
for /d /r "%pap%" %%i in (*.*) do (
pushd "%%~i" && (
for /f "delims=" %%a in ('dir /s/b/a-d') do (
"C:\Program Files\WinRAR\rar" a "%%~nxa.zip" "%%~nxa"
)
)
popd
)
Автор: Jon_Dow
Дата сообщения: 09.07.2016 17:18
fakel33
"%%~nxa.zip" замени на "%%~fa.zip"

Добавлено:
Ну и на будущее: FOR /? желательно изучать до написания скрипта. И всегда помнить, что неописанное значение или значение по-умолчанию может иногда станорвится не таким как тебе нужно.

Добавлено:
хотя нет - так не сработает - у тебя во внутреннем цикле информации о пути уже нет.

Добавлено:
Тогда переписываям батник по другому(только основа перебора файлов):
Код: @ECHO OFF
SET "pap=d:\Проекты"
FOR /r "%pap%" %%a IN (*) DO ECHO "%%~a"
Автор: VictorVG4
Дата сообщения: 09.07.2016 17:53
LorOginret

Конечно, куда мне разбираться в высших материях.
Автор: iglezz
Дата сообщения: 09.07.2016 18:38
A05032013

Цитата:
В моем случае - разность грубо 6% в степени сжатия, и в 6 (!) раз по времени.
Отсюда и вопрос - 7зип у всех "черепаха" при сопоставимой степени сжатия по сравнению с Винрар-ом, или есть какая "хитрость" в настройках?
Кстати даже выставляя в 7-зип скоростное сжатие - до скорости винрара еще далеко.. а вот в сжатии - уже проигрыш..

Для этого SEP_12.1.7004.6500_EN на i3-3220/8Gb:

WinRAR - 51.416 Kb за 24 сек (256/215 мб словарь, почти одинаковый результат)
7-Zip - 51.846 Kb за 46 сек (384 мб словарь, р-р слова 8, yx=9, 2 потока)
7-Zip - 49.599 Kb за 60 сек (384 мб словарь, р-р слова 16, yx=9, 2 потока)
7-Zip - 48.525 Kb за 100 сек (384 мб словарь, р-р слова 128, yx=9, 2 потока)
7-Zip - 48.533 Kb за 119 сек (384 мб словарь, р-р слова 256, yx=9, 2 потока)

Как видно, если не стремиться выставить все настройки на максимум, разница в скорости не столь печальная.
По наблюдениям в Process Explorer:
WinRAR процессор нагружает равномерно все 4 "ядра" и посильнее 7зипа
7-Zip - при установке в 2 или 3 потока - только 3 "ядра" и не столь интенсивно
Но это всё выводы по конкретному архиву...

ЗЫ
[more=проверил тут ещё]
на распакованом libreoffice (msiexec /a LibreOffice_5.1.4_Win_x86.msi)
WinRAR - 124 сек, 253.049 кб (256/512 мб словарь)
7-Zip - 127 сек, 192.370 кб (384 мб словарь, р-р слова 8, yx=9, 2 потока)
7-Zip - 177 сек, 177.824 кб (384 мб словарь, р-р слова 12, yx=9, 2 потока)

пачка шрифтов на 300 мб:
WinRAR - 42 сек, 117.155 кб
7-Zip - 60 сек, 111.777 кб
[/more]
Не так уж и плохо у 7-Zip с балансом скорости/степени сжатия

Автор: VictorVG4
Дата сообщения: 09.07.2016 20:04
iglezz

Архитектурная оптимизация алгоритмов. Rar под Intel, 7-Zip под AMD. Давно известная штука, тайна только для новичков, да и то пока они не получат знания.
Автор: Sybiriak
Дата сообщения: 09.07.2016 21:21
iglezz
Речь идет об этом [more=LibreOffice_5.1.4_Win_x86.msi]?
LibreOffice_5.1.4_Win_x86.msi от 16.06.16, 00:50 (размер - 221 675 520 байт, MD5 - 0994f168b4e699882f3bb5127a24a6ce).
После распаковки (msiexec /a): 1 029 173 773 байт , Файлов: 17 325; папок: 1 023
[/more]
Если о нем, то архив rar, (rar v.5.30 x64 с ключами -m5 -ma5 -md512 -s -qo- -tsm1 -ds), у меня вышел 189 264 268 байт.
Автор: fakel33
Дата сообщения: 09.07.2016 21:47
Jon_Dow
Спасибо, получилось, то что хотел.
Автор: greenfox
Дата сообщения: 13.07.2016 10:16
Приветствую!

Вопрос возник по 7z. Вызывается из PowerShell стандартной командой аля:
& "C:\Program Files\7-Zip\7z.exe" a d:\Log2\Archive.7z d:\Logs\ForwardedEvents* -sdel
Т.е. банально архиватор архивирует все файлы где в имени присутствует "ForwardedEvents" и удаляет их. Фича в том, что даже если таких файлов нет, архиватор создаёт пустой архив Archive.7z. Собственно вопрос - есть ли возможность поправить? (в rar последний создаёт архивный файл по дефолту если там есть что заархивировать)

Заранее спасибо!
Автор: VictorVG4
Дата сообщения: 13.07.2016 10:39
greenfox

Да простой if then else в скрипт добавить. В подобной ситуации у меня скрипт-чистильщик так же пустой архив создать может:

Цитата:
@rem %1 is build number, %2 - is SVN revision number
@echo off
@if not "%~2" == "" (7z a F:\Developmer\Far30\bin\far-30.%1.%2-bin.7z ./18/* -r0 -mx7 -sdel) else (7z a F:\Developmer\Far30\bin\far-30.%1-bin.7z ./18/* -r0 -mx7 -sdel)
@rm -fR ./24/* ./6/*
@mv -f ./25/* ./24/
@mv -f ./5/* ./6/

просто у меня ставить в него кучу проверок руки не доходят, хотя по совести и стоит.
Автор: greenfox
Дата сообщения: 13.07.2016 12:49
Вычитал в каком-то треде по 7z официальном, что архиватор при добавлении в архив всегда сначала создаёт файл архива а потом уже туда добавляет файлы и если таковых нет - файл архива пустой так и остаётся созданным на файловой системе. Т.е. получается надо сначало проверять самому в скрипте наличие нужный файлов и уже потом вызывать архиватор ....
Автор: VictorVG4
Дата сообщения: 13.07.2016 13:45
greenfox

Естественно, все архиваторы так поступают - сначала создаётся пустой контейнер (часто просто используется готовый шаблон формата), после в него добавляется содержимое. Можно конечно сделать наоборот, только это увеличивает вероятность ошибки операции, а значит не имеет смысла.
Автор: greenfox
Дата сообщения: 13.07.2016 13:58

Цитата:
Естественно, все архиваторы так поступают - сначала создаётся пустой контейнер (часто просто используется готовый шаблон формата), после в него добавляется содержимое. Можно конечно сделать наоборот, только это увеличивает вероятность ошибки операции, а значит не имеет смысла.

в winrar кажется как раз наоборот по дефолту - если файлов на архивацию нет по заданным параметрам - архив не создаётся (или авотматом удаляется). Имхо так логичнее.
Автор: VictorVG4
Дата сообщения: 13.07.2016 16:03
greenfox

Не обязательно создавать контейнер на диске - его можно формировать в ОЗУ как это делает rzip ( ). Правда rzip при этом и жрёт от 900 Мб ОЗУ, но своё дело делает. А rar сначала копирует в рабочий каталог заготовку архива (rar.dat, 20 байт) а после создаёт архив.

В процессе:



результат:



И естественно, если архиватор не найдёт файлов попавших под маску, то выведет сообщение об ошибке и не начнёт операцию.

Например если запустить команду:

tar -cJf regdiff-4.3-src.tar.xz --exclude=.git --exclude-vcs --exclude=*.VC.db --exclude=.vs --exclude=rel --exclude=rel64 ./regdiff

а файлов не будет, то в терминале увидим сообщение об ошибке выведенное tar:

tar: ./regdiff: Cannot stat: No such file or directory
tar: Exiting with failure status due to previous errors
Автор: greenfox
Дата сообщения: 13.07.2016 18:02

Цитата:
Не обязательно создавать контейнер на диске

да это всё понятно, просто обратил внимание на эту странную особенность 7z - я как пользователь больше сужу, мне странно видеть пустые архивы если программа ничего не нашла на архивацию
Автор: VictorVG4
Дата сообщения: 13.07.2016 19:57
greenfox

Так rar же автоматически удаляет пустой архив. А 7-Zip, tar, zip так не делают. После той команды что я выше привёл даже в случае если файлов не найдено на слайсе будет лежать пустой архив regdiff-4.3-src.tar.xz размером 108 байт, после Zip 22 байта, а после p7zip 32 байта. Сколько раз такое видел.
Автор: redson
Дата сообщения: 26.07.2016 20:50
создаю своим cmd скриптом sfx архив, на выходе получаю готовый само-распаковывающийся архив exe. но при его запуске срабатывает UAC. как мне в этот архив встроить manifest файл, что бы при запуске само-распаковывающегося архива, не срабатывал UAC ?
Автор: CryptoUsbtor
Дата сообщения: 28.07.2016 02:11
redson
А с чего вы решили, что он не будет срабатывать????
Просто появится запрос повышения прав...
Что бы не срабатывал uac... надо что бы его не было. Тогда и срабатывать будет нечему.
Да, скажите вы, есть такие приложения, на них он не ругается... но это не изза прав...
Просто те прилодения доверенные и с цифровой подписью..
Если что... с манифестами могу помочь. Там и нпдо то одну строчку подправить...
Автор: redson
Дата сообщения: 28.07.2016 08:13
CryptoUsbtor

Цитата:
Если что... с манифестами могу помочь. Там и нпдо то одну строчку подправить...

не подскажете?
Автор: regist123
Дата сообщения: 28.07.2016 14:03
redson 09:13 28-07-2016
Цитата:
не подскажете?

requestedExecutionLevellevel
А подробней про манифесты можете почитать тут.
Автор: bibliary
Дата сообщения: 16.08.2016 13:13
Есть такая задача:
С помощтю 7za заархивировать все файлы в определенной папке и положить архивы там же с теми же названиями, но с прибавлением расширения 7z

Пробовал изначально такой bat-файл

set _in=F:\
set _out=F:\
set _archpath="E:\7z\7za.exe"
for "%%a" in (%_in%\*.*) do "%_arcpath%\7za.exe" a -tzip -ssw -mx7 -r0 "%_out%\%%~ni.7z" "%%a"

при выполнении выдавало ошибку: Непредвиденное появление %%i

попробовал как выше писалось:

@echo off
set pap=F:\
for /d /r "%pap%" %%i in (*.*) do (
pushd "%%~i" && (
for /f "delims=" %%a in ('dir /s/b/a-d') do (
"E:\7z\7za.exe" a "%%~nxa.zip" "%%~nxa"
)
)
popd
)

в командной строке когда выполняю bat-файл - ошибок не вываливается, но и архивы не делаются.

Скажите что я делаю не так?)
Автор: Jon_Dow
Дата сообщения: 16.08.2016 13:49
bibliary
Цитата:
for "%%a"
это еще что такое?! Увлекся?

Код: FOR /?
Автор: lvqcl
Дата сообщения: 16.08.2016 13:58
bibliary

Цитата:
при выполнении выдавало ошибку: Непредвиденное появление %%i


Если переменная цикла %a, то нужно писать %%~na.7z, а не %%~ni.7z.
(и почему for "%%a" - с кавычками?)
Автор: bibliary
Дата сообщения: 16.08.2016 14:15

Цитата:
это еще что такое?! Увлекся?


да, увлекся и нормально не подумал над тем что в bat-файл написал)

Вышло вполне ок как я и хотел командой

for %i in (F:\*) do ("E:\7z\7za.exe" a -tzip %i.7z %i)

А вот насчет % и %% - для bat-файла его нужно два ставить, а если выполнить скопировав команду в командной строке один?
Автор: VictorVG4
Дата сообщения: 16.08.2016 14:18
bibliary

Jon_Dow прав, и я позволю себе чуть подробнее раскрыть его подсказку.

В вашем случае двойной знак % не нужен, т.к. это сигнал терминалу что мы передаём команде не параметр скрипта, а переменную среды, а уже команда с ней работает. Если уберёте двойной %% заменив его на % то при вызове батника вам придётся учесть и то, что его параметры позиционно-зависимы и если у вас их к примеру три, то опустить второй нельзя т.к. возникнет ошибка их сдвига влево на число опущенных параметров. Ну, такую ошибку мы все по неопытности делали, и всем нам кто-то про эту штуку подсказывал.

А вызов (он кстати часто имеет схожий общий вид для разных ОС) имеет формат:

/? или иногда (обычно у портированных с UNIX/Linux или OS/2 программ) -? -- для DOS/Win

-h | -H | --help | --HELP | HELP - на UNIX/Linux или для портированных с них программ, в т.ч. работающих в средах CygWin/Msys

имеет общее назначение - вызов справки по данной программе, возможно что конкретная подкоманда имеет свой раздел справки вызываемый например так, как это реализовано в системе контроля версий SVN - svn help dff выведет справку по команде svn diff и её ключам. При это нужно обращать особое внимание на то, что многие программы имеют несколько режимов работы и некоторые из ключей вызова могут иметь в них разное значение или кардинально менять поведение программы.

Автор: shylExSSchumi
Дата сообщения: 22.08.2016 12:16
А как вызвать UI диалог архивации для какой-то папки вручную из ком. строки?
Как через: ПКМ > x64 > 7zip > Добавить к архиву
Автор: VictorVG4
Дата сообщения: 22.08.2016 12:25
shylExSSchumi

7zFM a <patch>
Автор: shylExSSchumi
Дата сообщения: 22.08.2016 12:31
VictorVG4
не хочет, просто показывает менеджер.
Может я неправильно объясняю - хочу вот этот диалог показывать.
Ещё не пойму, в поле "Параметры" можно ключи писать из командной строки?
А то пробую написать -xr!bin, ругается.

Добавлено:
Версия 16.02

Добавлено:
И ещё такой момент, UI запоминает мои настройки с последней архивации, а можно из командной строки запустить с этими ключами из UI?

Добавлено:
А с "Параметры" понятно, там не ключи, а параметры сжатия только (-m) можно настраивать.
Автор: hErAux
Дата сообщения: 22.08.2016 12:44
shylExSSchumi

Цитата:
просто показывает менеджер.
просто, 7zFM - это он и есть.
Пробуйте вызвать 7zG
Автор: shylExSSchumi
Дата сообщения: 22.08.2016 13:07
Да, это ближе к телу. Очень ближе, вижу запускает сразу диалог, без ожидания ввода.

Добавлено:
Нашёл: 7zG a -ad ...
-ad Show dialog box in GUI version (7zg)

Добавлено:
А вызывается 7zg из контекстного меню с интересными загогулинами, если выбрать папку:
a -i#7zMap10785:36:7zEvent4686 -ad -slp- -saa -- C:\TempDir\china
А вот если выбрать папку и ещё пару файлов:
a -i#7zMap11082:208:7zEvent15842 -ad -slp- -saa -- C:\TempDir\china\china

Руки за такое, конечно, надо бы поотрывать.
Всё это можно посмотреть в CPP\7zip\UI\Common\CompressCall.cpp
Автор: Siropa
Дата сообщения: 04.09.2016 22:50
Уважаемые гуру кодинга может кто возьмется переделать: Easy 7-Zip под 16.02?[more] Автор застрял на 15.06 и дальше не шевелится, а фишки приделал интересные - основная для меня работа в фоне и иконка в трее. Исходники там-же на сайте. Пытался сам: сравнивал исходники 16.02,15.06 и модификации, редактировал но знаний по коду ноль.[/more]

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135

Предыдущая тема: RDM+, TSMobiles и VNC+


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.