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

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

Автор: hust13r
Дата сообщения: 01.04.2012 09:52
Всем привет!
Окончательно перебравшись на 7zip, доставляет неудобства лишь один момент - невозможность запуска приложений прямо из архива. В WinRar'e - данная фича реализована путем извлечения всего содержимого архива в темп и запуск из темп.

Возможно ли как-то решить данный "недочет"?
Спасибо!)
Автор: snkreg
Дата сообщения: 01.04.2012 10:55
hust13r
НаоZIP
Автор: maxvlas
Дата сообщения: 01.04.2012 11:52
У меня x86 XP

Я первый раз столкнулся с этим,вчера короче распаковывал 7z нормально и сегодня его же попробовал тоже "ОК"
А эти http://forum.ru-board.com/topic.cgi?forum=35&topic=8949&start=300#lt Official PortableTreeSize Pro попробовал,ничерта

В чем проблема?,здесь на форуме нашел почитал
http://forum.ru-board.com/topic.cgi?forum=5&topic=1406&start=1240#13
Я так понял если мне будут попадаться такие архивы то я не извлеку их,надо кого то просить будет?
egor23

Цитата:
попробуйте консольный 7-zip, скорее всего поможет.

Объясните пожалуйста как им пользоваться,не имел дело ни с консольной версией ни командной строкой
Автор: unreal666
Дата сообщения: 01.04.2012 14:26
какие параметры надо указать в командной строке, чтобы они соответствовали этому

Автор: unreal666
Дата сообщения: 01.04.2012 22:43
сам разобрался.

7z.exe a имя_архива.7z -mmt=2 -mx=9 -m0=LZMA2:d=128m:fb=192 -ms=4g
Автор: egor23
Дата сообщения: 02.04.2012 19:27
maxvlas

Цитата:
Объясните пожалуйста как им пользоваться,не имел дело ни с консольной версией ни командной строкой

7z.exe x archive.7z

или используйте, какую-нибудь оболочку, например PeaZip http://peazip.sourceforge.net/

Автор: maxvlas
Дата сообщения: 02.04.2012 20:12
Будьте добры подробней подскажите.не имел я делов с этим
egor23

Цитата:
7z.exe x archive.7z

давайте поподробней:
1.Скачал 7za920.zip    384.8 KB    IA32    .zip, консольная версия (для командной строки)
2.Разархивировал
3.Скачал TreeSize Pro 5.5.5.816.7z отсюда http://forum.ru-board.com/topic.cgi?forum=35&topic=8949&start=300#15
4.Что теперь надо ,Мне просто это 7z.exe x archive.7z надо в командной строке ввести?


____________________________________
egor23

Цитата:
или используйте, какую-нибудь оболочку, например PeaZip http://peazip.sourceforge.net/

Спасибо PeaZip( портативной) разархивировал ,но еще про консольную на будущее чтоб знал подскажите
Автор: unreal666
Дата сообщения: 04.04.2012 18:18
maxvlas

Цитата:
но еще про консольную на будущее чтоб знал подскажите

так тебе же подсказали.
полный вариант разархивирования:

Код: 7za x путь_к_архиву -o"папка_куда-распаковывать"
Автор: Victor_VG
Дата сообщения: 04.04.2012 18:54
maxvlas

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

7z x <путь_к_архиву> -o<путь_к_папке_приёмнику>&&exit

конструкция называется "конвейер команд" и если команда распаковки завершится успешно, то окно автоматически закроется, иначе Вы увидите в нём причины ошибки и её код. И скачивать 7za920.zip совсем не обязательно - консольная версия архиватора - 7z.exe включена в дистрибутив 7z925.exe (7z925.msi, 7z925-x64.msi) и отдельно скачивать его для Вас необходимости нет, но стоит использовать последние Alpha/Beta версии из имеющихся, т.к. они содержат улучшения и исправления ошибок обнаруженные/внесённые после очередной стабильной версии.
Автор: The Unforgiven
Дата сообщения: 04.04.2012 19:00
http://sourceforge.net/projects/sevenzip/forums/forum/45797


Цитата:
This forum is private.

Это что-то новенькое. Форум закрыли или просто профилактика?
Автор: GORA2
Дата сообщения: 04.04.2012 19:05

Цитата:
Форум закрыли или просто профилактика?

Спамеры атаковали. За 6 ночных часов мне пришло 500 сообщений с форума. Днем еще сотни три...
Автор: The Unforgiven
Дата сообщения: 04.04.2012 19:13
GORA2
"Вот уроды" (C) Заняться больше нечем, лучше бы свои силы в позитивное русло направили.

Вроде стабильная версия совсем скоро выйдет?
Автор: Victor_VG
Дата сообщения: 04.04.2012 20:16
The Unforgiven
GORA2

По их "милости" даже когда залогонился форум пока не доступен: This forum is private. Monitoring has been stopped.
Автор: Victor_VG
Дата сообщения: 05.04.2012 00:41
The Unforgiven

Если мне не меняет память и ничего не помешает, то в этом месяце Игорь планировал выпустить новую версию. А какую собирать это только он сам решит.

И ещё - не доступен не только форум, но и индексная страница проекта: Whoops, we can't find that page.. Так что надо ждать пока ребята весь спам вычистят.
Автор: GORA2
Дата сообщения: 05.04.2012 10:28

Цитата:
не доступен не только форум, но и индексная страница проекта

Форум зачищен от спама и вновь доступен.
Автор: Victor_VG
Дата сообщения: 05.04.2012 16:14
GORA2

Ok!
Автор: unreal666
Дата сообщения: 05.04.2012 16:27
Составил тут батник для пакетного конвертирования не 7z-архивов в 7z.

Сам батник:
[more]
Код: @ECHO off
@CHCP 1251 >nul 2>&1
REM PAUSE
REM Данный командный файл преобразовывает все архивы (в том числе и в подпапках) в 7z.
REM Параметры рассчитаны на методы сжатия LZMA и LZMA2.
TITLE "Преобразование архивов в 7z"

SETLOCAL EnableExtensions

SET "a7z=%~dp07z.exe"
IF NOT EXIST "%a7z%" FOR /f "tokens=2*" %%J IN ('REG QUERY HKLM\Software\7-Zip /v Path64 2^>nul ^| FIND /i "REG_SZ" ') DO SET "a7z=%%~K\7z.exe"
IF NOT EXIST "%a7z%" FOR /f "tokens=2*" %%J IN ('REG QUERY HKLM\Software\7-Zip /v Path 2^>nul ^| FIND /i "REG_SZ" ') DO SET "a7z=%%~K\7z.exe"
IF NOT EXIST "%a7z%" FOR /f "tokens=2*" %%J IN ('REG QUERY HKLM\Software\Wow6432Node\7-Zip /v Path32 2^>nul ^| FIND /i "REG_SZ" ') DO SET "a7z=%%~K\7z.exe"
IF NOT EXIST "%a7z%" FOR /f "tokens=2*" %%J IN ('REG QUERY HKLM\Software\Wow6432Node\7-Zip /v Path 2^>nul ^| FIND /i "REG_SZ" ') DO SET "a7z=%%~K\7z.exe"
IF NOT EXIST "%a7z%" FOR /f "tokens=2*" %%J IN ('REG QUERY HKCU\Software\7-Zip /v Path64 2^>nul ^| FIND /i "REG_SZ" ') DO SET "a7z=%%~K\7z.exe"
IF NOT EXIST "%a7z%" FOR /f "tokens=2*" %%J IN ('REG QUERY HKCU\Software\7-Zip /v Path 2^>nul ^| FIND /i "REG_SZ" ') DO SET "a7z=%%~K\7z.exe"
IF NOT EXIST "%a7z%" SET "a7z=%ProgramFiles%\7-Zip\7z.exe"
IF NOT EXIST "%a7z%" ECHO По пути "%a7z%" и в реестре путь к проге 7z.exe не найден. Задайте правильный путь в переменной a7z. & PAUSE & GOTO END

REM Расширения файлов для преобразования
SET "ext=*.z *.zip *.gz *.gzip *.bz2 *.bzip2 *.lzma *.bz2 *.rar *.tar *.tgz *.tbz *.tpz *.taz *.lzh *.lha *.arj"

REM Степень сжатия. Допустимые значения: 0, 1, 3, 5, 7, 9. 0 - без сжатия, дальше по увеличению.
SET "x=9"
REM Метод сжатия. Допустимые значения: LZMA и LZMA2.
SET "m=LZMA2"
REM Размер словаря. Максимум 1 Гб. По умолчанию: нормальный режим - 24 (16 Мб), максимальный - 25 (32 Мб), ультра - 26 (64 Мб).
REM Указывать или ввиде Размер[b|k|m] (например -md=64m, что соответствует -md=26) или в виде константы, как в строке выше.
SET "d=192m"
REM Число быстрых байтов (он же, размер слова). Диапазон 5-273. По умолчанию: нормальный режим - 32, максимальный и ультра - 64.
SET "fb=256"
REM Включает или отключает сплощной режим. Синтаксис: [off | on | [e] [{N}f] [{N}b | {N}k | {N}m | {N}g)].
REM e - использовать отдельные сплошные блоки для каждого расширения файлов
REM {N}f - установить ограничение на кол-во файлов в одном сплошном блоке
REM [{N}b | {N}k | {N}m | {N}g)] - установить ограничение общего размера сплошного блока в байтах.
SET "s=4g"
REM Кол-во потоков равно кол-ву ядер
SET /a "mt=%NUMBER_OF_PROCESSORS%"

REM Сохранение времени последней модификации для файлов (по умолчанию - on)
SET "tm=on"
REM Сохранение времени создания для файлов (по умолчанию - off)
SET "tc=off"
REM Сохранение времени последнего доступа для файлов (по умолчанию - off)
SET "ta=off"
REM Пароль по умолчанию на архивы
SET "pass=secret"

REM ======== Собственно преобразование ========

REM Генерируем имя подпапки для папки %TEMP%
SET "tmpF=%date%%time: =%"
SET "tmpF=%tmpF:,=%"
SET "tmpF=%tmpF::=%"
SET "tmpF=%tmpF:.=%"
SET "tmpF=%TEMP%\%tmpF%"

SET "SrcDir=%CD%"
RMDIR /s /q "%tmpF%" >nul 2>&1

: STARTCODING

IF "$%~1"=="$" GOTO END

SET "isFolder=false"
REM Проверяем папка это или файл, и если папка, то устанавливаем переменную
DIR "%~1" /a:d >nul 2>&1 && SET "isFolder=true"
IF "%isFolder%"=="true" (
    CD /d "%~1" 2>nul >nul
    FOR /r %%J in (%ext%) DO CALL :Archiving "%%~J"
) ELSE CALL :Archiving "%~1"
CD /d "%SrcDir%" >nul 2>&1
SHIFT
GOTO STARTCODING

: Archiving

SET "ArcName=%~n1"
SET "ArcExt=%~x1"
CALL :Unpack "%~1"
IF %errorlevel%==0 (
    CALL :Unpack2 "%~1"
    CALL :Packing "%~1"
) ELSE TYPE "%tmpF%.txt"
DEL /f /q "%tmpF%.txt" >nul 2>&1
RD /s /q "%tmpF%" >nul 2>&1
ECHO.
ECHO. ========================================================
ECHO.
EXIT /b

: Unpack

ECHO Архив "%~1".
ECHO Стадия 1.1: Распаковка
ECHO ---
"%a7z%" x "%~1" -o"%tmpF%" -p%pass% -y -sccWIN > "%tmpF%.txt" 2>&1
EXIT /b %errorlevel%

: Unpack2

ECHO Стадия 1.2: Попытка распаковки "вложенного" архива
ECHO ---
REM Если есть папки, то выходим из подпрограммы
DIR "%tmpF%" /b /a:d | findstr /r "." >nul 2>&1 && EXIT /b
REM Если в корне нет файлов (т.е. типа архив пустой), то выходим из подпрограммы
DIR "%tmpF%" /b /a:-d >nul 2>&1 || EXIT /b
REM Если файлов больше одного, то выходим из подпрограммы
DIR "%tmpF%" /b /a:-d | FINDSTR /n "." | FINDSTR /b "2" >nul 2>&1 && EXIT /b

REM Пытаемся распаковать
SET "ext2=%ext% *.7z"
SET "ArcName2="
SET "ArcExt2="
SET "errlev=1"
PUSHD "%tmpF%"
FOR %%J in (%ext2%) DO ( SET "ArcName2=%%~nJ" & SET "ArcExt2=%%~xJ" )
POPD
IF NOT "$%ArcName2%"=="$" ( "%a7z%" x "%tmpF%\%ArcName2%%ArcExt2%" -o"%tmpF%-2" -p%pass% -y -sccWIN >nul 2>&1 && SET "errlev=0" )
IF %errlev%==0 (
    RD /s /q "%tmpF%" >nul 2>&1 & MOVE "%tmpF%-2" "%tmpF%" >nul 2>&1 & SET "ArcName=%ArcName2%"
) ELSE RD "%tmpF%-2" >nul 2>&1
EXIT /b

: Packing

ECHO Стадия 2.0: Архивирование
"%a7z%" a "%~d1\%ArcName%.7z" "%tmpF%\*" -mx=%x% -m0=%m%:d=%d%:fb=%fb% -ms=%s% -mmt=%mt% -mtm=%tm% -mtc=%tc% -mta=%ta% -sccWIN > "%tmpF%.txt" 2>&1
IF %errorlevel%==0 (
    MOVE /y "%~d1\%ArcName%.7z" "%~dp1%ArcName%.7z" >nul 2>&1
    DEL "%~1" >nul 2>&1
    ECHO ---
    ECHO Преобразование завершено успешно.
) ELSE DEL "%~d1\%ArcName%.7z" >nul 2>&1 & ECHO Ошибка преобразования: & TYPE "%tmpF%.txt"
EXIT /b

: END

ENDLOCAL
REM PAUSE
@CHCP 866 >nul 2>&1
IF "%PROC%"=="AMD32-64" RD %tmpW% >nul 2>&1
Автор: Victor_VG
Дата сообщения: 05.04.2012 21:59
unreal666

Для начала там надо строчку 10 поправить - абсолютный путь к бинарнику 7-Zip указанный там гарантирует ошибки. Посему надёжнее скрипт кинуть в каталог к 7z.exe, а при вызове дать системе команду с полным путём к скрипту, или коли лень пути набирать добавить пути к каталогу 7-Zip в %PATH%. А не идти сегодняшним кружным путём.
Автор: unreal666
Дата сообщения: 05.04.2012 22:08

Цитата:
абсолютный путь к бинарнику 7-Zip указанный там гарантирует ошибки.

это почему?
У меня он нормально работает. Перекодировал кучу архивов в 20 папках.

Добавлено:

Цитата:
Посему надёжнее скрипт кинуть в каталог к 7z.exe

у меня все батники в одном месте лежат по иерархии: корень папки - инициализация доп. путей и переменных, подпапки - по типу/цели.
Автор: Victor_VG
Дата сообщения: 05.04.2012 22:25
unreal666

Строка 10:

Цитата:
SET "a7z=D:\Programs\Archivers\7-Zip\7z.exe"

а у меня например 7-zip по другому пути находится, и если путь не изменить, то скрипт вызовет ошибку "Не найден исполняемый модуль". Этого достаточно. Если на Вашей машине такое дерево каталогов, то это не значит что и у других оно под копирку построено. "Сиё есть глубочайшее заблуждение" как говорят в Одессе.

P.S.

У меня у друга так же "Работает на всех машинах!", но я уже ему если что из софта и даю, то только на оптике без возможности перезаписи - не раз после его машины на флешках или внешних дисках оказывался мусор, а данные и таблицы разделов были безвозвратно повреждены. У него-то "работает", да потом 2 Гб SD-ка Kingston почему-то оказывается имеет ёмкость не 1,9 Гб, а 50 Гб, и данные не читаются., а вместо имён файлов и каталогов виден мусор И даже команда format их не берёт пока под UNIX им таблицу разделов HEX редактором не исправишь, но ведь у него "всё работает!". А про его флешки я вообще не говорю - при записи на них любая машина минут на 40 - 50 после каждого файла "задумывается" - он их в NTFS отформатировал. И это несмотря на то, что у меня UNIX свободно NTFS и читает, и пишет с учётом всех прав доступа и атрибутов - драйвер NTFS в ядро встроен.
Автор: unreal666
Дата сообщения: 05.04.2012 22:50

Цитата:
а у меня например 7-zip по другому пути находится, и если путь не изменить, то скрипт вызовет ошибку "Не найден исполняемый модуль". Этого достаточно.

1. Если не добавить в переменную %PATH% и не ложить в папку 7z, то все равно вылезет ошибка.
2. Самопальные скрипты должны лежать отдельно от папок прог, т.к. папки прог имеют дело удаляться время от времени. Забудешь, что там скрипт и хана.

Я уже добавил проверку:

Код: IF NOT EXIST "%a7z%" ECHO По заданному пути "%a7z%" прога 7z.exe не найдена, поэтому выходим & PAUSE & GOTO END
Автор: Victor_VG
Дата сообщения: 06.04.2012 04:04
unreal666

Смысл-то не меняется. И насчёт форума - спам-таки докатился и ко мне - несколько сотен штук спама вычистил из почты пока бэкапные ленты читались. А проверка это хорошо, пусть лучше скрипт ругается, чем после куча ругани от людей свалится. Правда в таком виде толку от неё нуль - что в лоб, что по лбу "У меня работает!". Проверять надо не переменную поставил или нет, а наличие бинарника 7z.exe и если его нет, сообщать об ошибке. В общем за логику скрипта гвардейский "кол", за реализацию "два балла", за упорство в отстаивании собственных недоделок "отлично", и для меня сей вопрос закрыт навсегда - "А у меня работает!". Издание второе, стереотипное, старые ошибки оставлены, новые добавлены. Это из серии пусть думает лошадь - у неё голова большая.
Автор: Reiko
Дата сообщения: 06.04.2012 04:16
хм, тут в шапке сказано что последняя версия - 9.22
а я уже давно пользуюсь версией 9.25...
что-то не понятно
Автор: Victor_VG
Дата сообщения: 06.04.2012 04:21
Reiko

Всё просто - STABLE версия вообще 9.20, тестовая версия имеющая полный набор дистрибутивов - 9.22 BETA, а текущая версия в разработке 9.25 ALPHA.
Автор: unreal666
Дата сообщения: 06.04.2012 04:33
Victor_VG

Цитата:
Проверять надо не переменную поставил или нет, а наличие бинарника 7z.exe и если его нет, сообщать об ошибке.

А получше присмотреться:

Код: IF NOT EXIST "%a7z%" ECHO По заданному пути "%a7z%" прога 7z.exe не найдена, поэтому выходим & PAUSE & GOTO END
Автор: Asilus
Дата сообщения: 06.04.2012 12:57
unreal666
Подскажи, что в твоём скрипте изменить чтобы он сохранял исходную папку\папки?

Возможно ли сделать такой же, но для конвертации в zip?

На мой взгляд штука полезная, спасибо.
Автор: Victor_VG
Дата сообщения: 06.04.2012 15:40
Asilus

Ключи задать.

unreal666

Ну, вот так уже меньше вероятность ошибки, но ошибка осталась, и в другом - код:

SET "a7z=%ProgramFiles%\7-Zip\7z.exe"
IF NOT EXIST "%a7z%" ECHO По заданному пути "%a7z%" прога 7z.exe не найдена, поэтому выходим & PAUSE & GOTO END

предполагает, что 7z.exe уже установлен по этому пути. А если он находится в другом месте? Я бы вот откуда предложил прочитать путь к нему:

Цитата:
[HKEY_LOCAL_MACHINE\SOFTWARE\7-Zip]
"Path32"="С:\\Program Files\\7-Zip"
"Path"="С:\\Program Files\\7-Zip

сюда его инсталлер пишет, и его отсюда через REG прочитать можно и положить в переменную a7z:

Цитата:
SET "a7z=%ProgramFiles%\7-Zip\7z.exe"
REG QUERY HKLM\Software\7-Zip /v Path32 > %a7z% rem Добавить чтение реального пути из Реестра!
IF NOT EXIST "%a7z%" ECHO По заданному пути "%a7z%" прога 7z.exe не найдена, поэтому выходим & PAUSE & GOTO END

а дальше по коду, и ошибка никогда не возникнет если 7-Zip установлен или его параметры есть. Это надо было сразу сделать, и именно такого решения я честно скажу и ждал. А проверка через переменную - это не плохо, а если случайно там 7z.exe нет? Летим на выход с возможно ложным сообщением об ошибке?
Автор: unreal666
Дата сообщения: 07.04.2012 02:28
Asilus

Цитата:
Подскажи, что в твоём скрипте изменить чтобы он сохранял исходную папку\папки?

Эм. Это какую исходную? Папки, в которых лежат конвертируемые архивы, и так никуда не деваются.

Victor_VG

Цитата:
А если он находится в другом месте?

фраза у меня в посте

Цитата:
- Изменить путь к 7z.exe в переменной a7z



Цитата:
Летим на выход с возможно ложным сообщением об ошибке?

Ну почему же ложным. Вполне соответствует, т.к. в сообщении сказано

Цитата:
По заданному пути "%a7z%" прога 7z.exe не найдена

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

Цитата:
Это надо было сразу сделать, и именно такого решения я честно скажу и ждал.

у меня нет таких ключей, т.к. у меня он установлен распаковкой, а не самим инсталером, поэтому не мог проверить. (ставить специально 7z инсталером не хотелось).
там вообще можно из нескольких мест реестра взять.

Цитата:
REG QUERY HKLM\Software\7-Zip /v Path32 > %a7z%

Разве с таким кодом я не перезапишу exe-шник данными из реестра?

PS.
Сейчас подумаю, как более полную проверку сделать по разным веткам реестра.

ALL

У кого стоит 64-битный 7-zip по стандартному пути скажите значения переменных в ветке HKLM\Software\7-Zip для переменных Path и Path64.
Автор: Victor_VG
Дата сообщения: 07.04.2012 02:52
unreal666

Нет, бинарник не перезапишет- мы ведь только читаем значение из Реестра в переменную, и я привёл тот ключ, который если мы запускали инсталлер им создаётся всегда, но почему бы не использовать иной? Главное, чтобы он указывал на реальный путь к каталогу с 7-Zip и существовал на момент запуска скрипта, а где его взять это дело техники. Ключ QUERY только считывает указанные ему значения и ключи и выводит их на экран, но мы перехватываем его вывод и направляем в нужную нам переменную, и как приёмник можем использовать любую.
Автор: unreal666
Дата сообщения: 07.04.2012 03:13
Victor_VG

я к тому, что фраза "> %a7z%" отправит данные не в переменную a7z, а в файл, указанный в переменной a7z, т.е. файл, указанный в a7z, перезапишется данными из реестра. Тем более вывод reg query содержит много лишних данных.
надо делать что-то типа этого

Код: for /f "tokens=2*" %%J in ('REG QUERY HKLM\Software\7-Zip /v Path ^| find /i "reg_sz" ') do set "a7z=%%~K\7z.exe"

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135

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


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