MultiArc
Модераторы: Моторокер, Avada, CaptainFlint, Nik, d-view
imig73
Сам ехе-шник архивера здесь (тут более точная ссылка, чем в моём пред. посте): github.com/Tvangeste/dictzip-win32/releases/tag/1.12.1-win32-1.0.
Там также есть исходники.
Запускаю dictzip.exe с /? - параметры не показывает, непонятно, что нужно в ini-файле аддона прописывать.
Как выше написал, надо только запаковывать научить, в архив заходить и извлекать ТС сам умеет (архивы типа gz, но чуть другие, расширение архива .dz, сделан чтобы текстовые файлы словарей в формате .dsl сжимать)
Сам ехе-шник архивера здесь (тут более точная ссылка, чем в моём пред. посте): github.com/Tvangeste/dictzip-win32/releases/tag/1.12.1-win32-1.0.
Там также есть исходники.
Запускаю dictzip.exe с /? - параметры не показывает, непонятно, что нужно в ini-файле аддона прописывать.
Как выше написал, надо только запаковывать научить, в архив заходить и извлекать ТС сам умеет (архивы типа gz, но чуть другие, расширение архива .dz, сделан чтобы текстовые файлы словарей в формате .dsl сжимать)
Доброго времени суток.
Как-то я в данном треде уже интересновался по поводу совместного использования архиватора TAR и MultiaRC'a но т.к. конечное решение было так себе я тогда махнул на это дело рукой. Сейчас, взявшись за разбор работы мультиарка вернулся заодно и к этому вопросу. Используя небольшой wrapper на autoit удалось вполне успешно прикрутить cygwin'овский TAR и зависимые тулзы (gz,ungzip,bz2,xz) к мультиарку заменяя виндовые пути до файлов на cygdriv'овые (был ещё bsdtar, который я нашёл чуть позже, но было уже влом им заниматься т.к. формат выхлопа надо подгонять ввиду отличий). С листингом архивов проблем не было. А вот с распаковкой/упаковкой они возникли. Основная проблема оказалась в том, что cygwin'овский tar не принимает пути до файлов в архиве с прямыми "\" слешами, которые ему передаёт мультиарк. Если слеши обратные "/", то всё (в консоли) работает корректно. Поэтому ввиду данного обстоятельства первый вопрос - возможно ли как-то реверсировать слеши в передаваемых путях до файлов ?
Следующая проблема, если удастся решить вопрос со слешами, встаёт в исключение базовой папки из распаковки TAR'ом т.е. файл анпачится с полной веткой директорий в %TEMP%\$mltwcx, что в свою очередь вызовет обломинго при распаковке. По крайней мере именно так было с WinRar'ом который я использовал для анпака (в виде костыля), пока не добавил ключ "-ep1". Как подобное провернуть с TAR'ом я ХЗ. Он такого вроде не умеет. Посему второй вопрос - как заставить мультиарк идти за файлом в конец ветки директорий, в которую он (файл) был распакован ? Или это невозможно ?
Это основные моменты, которые хотелось бы уточнить. Помимо этого есть ещё ряд мелких вопросов касательно конфигурации/парсинга/команд/etc :
3) А что значит модификатор "U" (Command definition format) ? В оф.справке его нет. "Use Unicode encoding" ?
4) Что за опция "FormMode" ? Переодически попадалось в аддонах, но в справке про неё ни слова.
5) Существует ли какая-нибудь утилита для помощи в составлении правил парсинга которые обрабатывают выхлоп листинга архиваторов ? Или такого нет и правила надо ваять исключительно вручную (на глаз) перепроверяя корректность через сам TC ?
6) Почему Multiarc пихает по одному файлу в файллист что при использовании %LFQA, что при использовании %LQA ? Из-за этого, что так, что так процесс (в данном случае WinRar'a с ключём -ibck) запускается для распаковки каждого файла. В таком случае какой смысл в файл-листах ? По идее в случае использования "%LQA" в файл-лист должны дропаться пути до всех файлов и архиватор должен по ним отработать, но этого почему-то не происходит.
Как-то я в данном треде уже интересновался по поводу совместного использования архиватора TAR и MultiaRC'a но т.к. конечное решение было так себе я тогда махнул на это дело рукой. Сейчас, взявшись за разбор работы мультиарка вернулся заодно и к этому вопросу. Используя небольшой wrapper на autoit удалось вполне успешно прикрутить cygwin'овский TAR и зависимые тулзы (gz,ungzip,bz2,xz) к мультиарку заменяя виндовые пути до файлов на cygdriv'овые (был ещё bsdtar, который я нашёл чуть позже, но было уже влом им заниматься т.к. формат выхлопа надо подгонять ввиду отличий). С листингом архивов проблем не было. А вот с распаковкой/упаковкой они возникли. Основная проблема оказалась в том, что cygwin'овский tar не принимает пути до файлов в архиве с прямыми "\" слешами, которые ему передаёт мультиарк. Если слеши обратные "/", то всё (в консоли) работает корректно. Поэтому ввиду данного обстоятельства первый вопрос - возможно ли как-то реверсировать слеши в передаваемых путях до файлов ?
Следующая проблема, если удастся решить вопрос со слешами, встаёт в исключение базовой папки из распаковки TAR'ом т.е. файл анпачится с полной веткой директорий в %TEMP%\$mltwcx, что в свою очередь вызовет обломинго при распаковке. По крайней мере именно так было с WinRar'ом который я использовал для анпака (в виде костыля), пока не добавил ключ "-ep1". Как подобное провернуть с TAR'ом я ХЗ. Он такого вроде не умеет. Посему второй вопрос - как заставить мультиарк идти за файлом в конец ветки директорий, в которую он (файл) был распакован ? Или это невозможно ?
Это основные моменты, которые хотелось бы уточнить. Помимо этого есть ещё ряд мелких вопросов касательно конфигурации/парсинга/команд/etc :
3) А что значит модификатор "U" (Command definition format) ? В оф.справке его нет. "Use Unicode encoding" ?
4) Что за опция "FormMode" ? Переодически попадалось в аддонах, но в справке про неё ни слова.
5) Существует ли какая-нибудь утилита для помощи в составлении правил парсинга которые обрабатывают выхлоп листинга архиваторов ? Или такого нет и правила надо ваять исключительно вручную (на глаз) перепроверяя корректность через сам TC ?
6) Почему Multiarc пихает по одному файлу в файллист что при использовании %LFQA, что при использовании %LQA ? Из-за этого, что так, что так процесс (в данном случае WinRar'a с ключём -ibck) запускается для распаковки каждого файла. В таком случае какой смысл в файл-листах ? По идее в случае использования "%LQA" в файл-лист должны дропаться пути до всех файлов и архиватор должен по ним отработать, но этого почему-то не происходит.
О_о Запускаете "rar.exe v архив.rar" и смотрите, куда и как архиватор выводит имена, какие тут могут быть утилиты?Baltazar писал(а):5) Существует ли какая-нибудь утилита для помощи в составлении правил парсинга которые обрабатывают выхлоп листинга архиваторов ? Или такого нет и правила надо ваять исключительно вручную (на глаз) перепроверяя корректность через сам TC ?
Я имел ввиду облегчение задачи составление выражения Format'a для парсинга выхлопа.Skif_off писал(а):О_о Запускаете "rar.exe v архив.rar" и смотрите, куда и как архиватор выводит имена, какие тут могут быть утилиты?
Не всегда очевидно, как та или иная комбинация сработает и ваять выражения на глаз, особенно новичку в этом вопросе довольно гемморойно. Это как использовать регекспы без возможности предварительного тестирования выражения, не зная как оно сработает в том или ином случае. Потому я интересовался, есть ли инструмент для предварительного прогона выражения "Format'a", где была бы возможность загнать выхлоп в поле для примера, после чего мере набора выражения подсвечивалась та или иная область выхлопа (по типу поиска по регекспам в NPP). Почему-то мне кажется, что я подобное где-то видел, но не могу вспомнить где
Baltazar
Честно говоря, не улавливаю, в чём сложность
Единственное что: по-хорошему, следует использовать редактор с моноширным шрифтом.
Получаете выхлоп:
Как видно, список файлов располагается по одному на строку, строго между строками, начинающимися с "-------------------", - это надо в Start и End.
Открываете MultiArc.chm, переходите на страницу "Format parsing", тут таблица "Format specifiers" и поехали: копируем строку в текстовый редактор
т.е. видим
Теперь по таблице меняем, с учётом количества символов:
Перед именем два пробела и имена могут быть разной длины, но, похоже, на имя приходятся все символы до конца строки: добавлять целое ведро "n" (256?) - это странно, потому смотрим там же в MultiArc.chm таблицу "Special specifiers" ниже и поправляем
Вроде не сильно сложно... А утилиты/скрипты, разбирающие вывод программ, как правило "знают", вывод какой программы и какой у неё шаблон.
Честно говоря, не улавливаю, в чём сложность
Получаете выхлоп:
Показать
Код: Выделить всё
7-Zip 21.07 (x86) : Copyright (c) 1999-2021 Igor Pavlov : 2021-12-26
Scanning the drive for archives:
1 file, 249136 bytes (244 KiB)
Listing archive: wcx_MultiArc_1.4.3.162.7z
--
Path = wcx_MultiArc_1.4.3.162.7z
Type = 7z
Physical Size = 249136
Headers Size = 424
Method = LZMA2:768k
Solid = +
Blocks = 1
Date Time Attr Size Compressed Name
------------------- ----- ------------ ------------ ------------------------
2015-09-20 14:54:45 D.... 0 0 Lang
2007-07-29 00:41:34 ....A 28672 248712 conspawn.pipe
2013-08-04 21:35:54 ....A 51712 conspawn.pipe64
2017-10-13 21:31:16 ....A 4390 Lang\English.lng
2017-10-13 21:31:08 ....A 4516 Lang\Russian.lng
2006-05-12 17:01:38 ....A 1747 LICENSE
2020-05-15 15:18:24 ....A 33544 MultiArc.chm
2007-07-31 00:02:58 ....A 42678 MultiArc.hlp
2020-05-15 15:38:36 ....A 173568 MultiArc.wcx
2020-05-15 15:38:32 ....A 215040 MultiArc.wcx64
2017-10-13 17:09:42 ....A 318 pluginst.inf
2020-05-15 15:40:01 ....A 5212 Readme.txt
------------------- ----- ------------ ------------ ------------------------
2020-05-15 15:40:01 561397 248712 11 files, 1 foldersОткрываете MultiArc.chm, переходите на страницу "Format parsing", тут таблица "Format specifiers" и поехали: копируем строку в текстовый редактор
Код: Выделить всё
2007-07-29 00:41:34 ....A 28672 248712 conspawn.pipeКод: Выделить всё
год месяц день час минуты секунды атрибуты размер размер-сжатого имяКод: Выделить всё
yyyy tt dd hh mm ss aaaaa zzzzzzzzzzzz pppppppppppp nnnnnnnnnnnnnnnnКод: Выделить всё
yyyy tt dd hh mm ss aaaaa zzzzzzzzzzzz pppppppppppp n++Кто-нибудь использовал с MPZ (программа для упаковки mp3)?К примеру, конфигурация:
[mp3 pack]
Extension=mpz
Description=Упаковка mp3 файлов
Archiver=c:\Program Files\Total Commander\Plugins\exe\mpz\mpz.exe
Debug=0
List=%P d %AQ %FQ
Format0=""zzzzzzzzzz nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn"
IgnoreErrors=1
Extract=%P %AQA d %FAQ
Add=%P c %FQ %AQ
Move=
Test=
Delete=
SFX=
Lock=
Protect=
Recover=
AllFilesMask="*.*"
Упаковка норм, а вот при извлечении никак не удаётся получить такое же название, как прежде. Все что-то вроде %s. Есть ли возможность извлекать mp3 с оригинальным именем?
И ещё при упаковке отображается только "плагин - mpz:". Есть способ выводить название файла, который архивируется в настоящий момент. Изучал конфигурацию, но ничего похожего не нашёл.
[mp3 pack]
Extension=mpz
Description=Упаковка mp3 файлов
Archiver=c:\Program Files\Total Commander\Plugins\exe\mpz\mpz.exe
Debug=0
List=%P d %AQ %FQ
Format0=""zzzzzzzzzz nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn"
IgnoreErrors=1
Extract=%P %AQA d %FAQ
Add=%P c %FQ %AQ
Move=
Test=
Delete=
SFX=
Lock=
Protect=
Recover=
AllFilesMask="*.*"
Упаковка норм, а вот при извлечении никак не удаётся получить такое же название, как прежде. Все что-то вроде %s. Есть ли возможность извлекать mp3 с оригинальным именем?
И ещё при упаковке отображается только "плагин - mpz:". Есть способ выводить название файла, который архивируется в настоящий момент. Изучал конфигурацию, но ничего похожего не нашёл.
Делая у себя ревизию установленных плагинов, решил таки погрузиться в работу MultiArc, захотелось наконец разобраться, как работает этот плагин. MPZ очень подошел для этих целей.
Не являюсь большим специалистом в написании батников и прочих скриптов, т.ч. не судите строго
mpz.bat
Не являюсь большим специалистом в написании батников и прочих скриптов, т.ч. не судите строго
Код: Выделить всё
[MPZ]
Description="MP3 Compressor"
Archiver=%COMMANDER_PATH%\Plugins\arc\mpz\mpz.bat
Extension=mpz
ID=05 04 05 01
IDPos=0
Start="---------------"
Format0="z+ n++"
List="%PQA l %AQA"
Extract="%PQA e %AQA %FQA"
Add="%PQA a %FQA %AQA"
IgnoreErrors=0
Debug=0
UnixPath=0
SkipDirsInFileList=1
SkipEmptyNames=1
BatchUnpack=0
SearchForUglyDirs=0
AskMode=2
Код: Выделить всё
SetLocal EnableExtensions
CHCP 866
cls
if %~z2 EQU 0 goto End
if /i "%1" =="l" goto List
if /i "%1" =="e" goto Extract
if /i "%1" =="a" goto Add
exit
:List
@echo off
@echo ---------------
@echo %~z2 %~n2.mp3
if %errorlevel% == 0 goto End
exit
:Add
"%~dp0mpz.exe" c "%~dpn2.mp3" "%~dpn3.mpz"
if not %errorlevel% == 0 exit
@echo Compression:
@echo "%~dp0mpz.exe" c "%~dpn2.mp3" "%~dpn3.mpz"
goto End
:Extract
"%~dp0mpz.exe" d %2 "%~n3.mp3"
@echo Decompression:
@echo "%~dp0mpz.exe" d %2 "%~dpn3.mp3"
:End
А как должен отрабатывать MultiArc, когда в конфиге прописаны варианты для innosetup:
Если первый не срабатывает, должен переходить на следующий?
Сталкивался с таким, что первый вариант не сработал и на этом обработка завершилась. Меняю в кофиге варианты
и распакова происходит.
Код: Выделить всё
[InnoSetup(gog)]
[InnoSetup]
[InnoSetup (unpack_one)]Сталкивался с таким, что первый вариант не сработал и на этом обработка завершилась. Меняю в кофиге варианты
Код: Выделить всё
[InnoSetup]
[InnoSetup(gog)]
[InnoSetup (unpack_one)]TC 11.58 combo, Windows 11 x64
MVV лучше/точнее ответит, но MultiArc должен прыгать на следующую секцию. Я даже сначала сделал кнопку, когда эксперементировал с InnoSetup, которая меняла сигнатуру в Multiarc.ini, типа:
только для того, чтобы он прыгал на следующую секцию [InnoExtract], и он прыгал, и все работало.
И все же я отказался от этого варианта в пользу
viewpost.php?p=136806
так лучше и удобнее, хотя и висит еще одна копия плагина
Код: Выделить всё
"%NIRSOFT%"\nircmd inisetval "%COMMANDER_PATH%\Plugins\wcx\MultiArc\Multiarc.ini" "InnoSetup" "ID" "49 6E 6E 6F"
"%NIRSOFT%"\nircmd inisetval "%COMMANDER_PATH%\Plugins\wcx\MultiArc\Multiarc.ini" "InnoSetup" "ID" "49 6E 6E 6F 00 00 FF FF"
И все же я отказался от этого варианта в пользу
viewpost.php?p=136806
так лучше и удобнее, хотя и висит еще одна копия плагина
Как писал выше, делаю сейчас пересмотр и обновление всех плагинов, и решил, что вход/распаковка upx в MultiArc мне все-таки нужна.
Проверял на последней 4.2.2
https://github.com/upx/upx/releases
upx.bat
P.S. Мне нужен только просмотр и распаковка, т.ч. будьте осторожны при упаковке: сверх-досконально я все не проверял. По возможности можете сами подправить батник.
Проверял на последней 4.2.2
https://github.com/upx/upx/releases
Код: Выделить всё
upx=79,%COMMANDER_PATH%\Plugins\wcx\MultiArc\multiarc.wcxКод: Выделить всё
[UPX]
Archiver=%COMMANDER_PATH%\Plugins\arc\upx\upx.bat
ID=00 55 50 58 21
IDPos=500,991,<SeekID>
Extension=upx
Description="Ultimate Packer for eXecutables"
Start="--------------------"
Format0=" +z+"
Format1=n++
List=%PQA -l %AQA %E2
Extract=%PQA -e %AQA %FQA
Add=%PQA -a %FQA {%S} %AQA
Test=%PQA -t %AQA
IgnoreErrors=0
Debug=0
UnixPath=0
SkipDirsInFileList=1
SkipEmptyNames=1
BatchUnpack=0
SearchForUglyDirs=0
AskMode=2
AskHistory0=-7
AskHistory1=--best
AskHistory2=--lzma
AskHistory3=-8
AskHistory4=-9
Код: Выделить всё
CHCP 866
@echo off
cls
if /i "%1" =="-l" goto List
if /i "%1" =="-e" goto Extract
if /i "%1" =="-a" goto Add
if /i "%1" =="-t" goto Test
exit
:List
"%~dp0upx.exe" -l %2
@echo %~nx2
goto End
:Test
"%~dp0upx.exe" -t %2
goto End
:Add
if exist "%~dp4%~n2--UPX!%~x2" goto Error
"%~dp0upx.exe" -k %3 --compress-icons=0 %2 -o "%~dp4%~n2--UPX!%~x2"
exit
:Extract
"%~dp0upx.exe" -d -k %2 -o %3
exit
:Error
echo MsgBox "Файл %~dp4%~n2--UPX!%~x2 уже существует и не может быть перезаписан!", vbOKOnly + vbCritical, "Ошибка" >%TEMP%\1.vbs
%TEMP%\1.vbs
:End