Командная строка 7Zip для извлечения файла по указанному пути

6686
SerG

Можно ли заставить 7Zip извлечь один файл по имени из архива по указанному полному пути (включая новое имя файла)?

Я нашел только:

7zip e <archive> -o<resultDirectory> <filemask>

Но это не то, что мне нужно.

2
Что вы пробовали, а что не работало? Maximus 10 лет назад 0
@ Максимус, я пытался искать в Google и читать руководства. И я сделал вывод, что нет способа извлечь файл из архива, чтобы файл результата имел указанное имя (не то же самое, что внутри архива), используя только команды 7zip. SerG 10 лет назад 0

1 ответ на вопрос

4
Axel Kemper

You can use the -so option to write the data to stdout and redirect to your target file:

Example:

7z e -so xxxx.7z > yyy.txt 

The commandline help of version 9.22 beta:

7-Zip [64] 9.22 beta Copyright (c) 1999-2011 Igor Pavlov 2011-04-18 Usage: 7z <command> [<switches>...] <archive_name> [<file_names>...] [<@listfiles...>] <Commands> a: Add files to archive b: Benchmark d: Delete files from archive e: Extract files from archive (without using directory names) l: List contents of archive t: Test integrity of archive u: Update files to archive x: eXtract files with full paths <Switches> -ai[r[-|0]]{@listfile|!wildcard}: Include archives -ax[r[-|0]]{@listfile|!wildcard}: eXclude archives -bd: Disable percentage indicator -i[r[-|0]]{@listfile|!wildcard}: Include filenames -m: set compression Method -o: set Output directory -p: set Password -r[-|0]: Recurse subdirectories -scs: set charset for list files -sfx[]: Create SFX archive -si[]: read data from stdin -slt: show technical information for l (List) command -so: write data to stdout -ssc[-]: set sensitive case mode -ssw: compress shared files -t: Set type of archive -u[-][p#][q#][r#][x#][y#][z#][!newArchiveName]: Update options -v[b|k|m|g]: Create volumes -w[]: assign Work directory. Empty path means a temporary directory -x[r[-|0]]]{@listfile|!wildcard}: eXclude filenames -y: assume Yes on all queries 

More recent alpha versions (9.30) also do not allow to specify a target filename as direct parameter without redirection.

Такой метод приводит к перенаправлению всего информационного вывода и требует дополнительной фильтрации. Потому что я использую 7Zip из c # (как более стабильную альтернативу ионному DotNetZip), я просто манипулирую папками и файлами, чтобы достичь своей цели. Также я где-то видел, что есть опция `-rn`, которая позволяет переименовывать файл внутри архива, но также есть проблемы с производительностью. SerG 10 лет назад 0
Уверены ли вы? Я пробовал это из коробки cmd.exe и полученный файл выглядит нормально. Это может помочь перенаправить канал 2 (stderr) отдельно от stdout. Axel Kemper 10 лет назад 0
Я не уверен, но: [это] (http://superuser.com/questions/148498/7zip-how-to-extract-to-std-output). SerG 10 лет назад 0
Да. Эта ошибка появляется, если вы просто используете `-so`, фактически не перенаправляя стандартный вывод в файл. Но как только вы добавляете "> yyy.txt", он работает без нареканий. Вызов 7z встроенный из C # это другой вопрос, кроме вашего первоначального вопроса. Axel Kemper 10 лет назад 1

Похожие вопросы