Извлечь определенный файл из архива с 7-Zip из командной строки

34

Если у меня есть архив, например, some.zipкоторый содержит один или несколько файлов, как я могу извлечь только один файл (я знаю имя файла) с 7-Zip из командной строки в Windows?

Kiesoo
источник

Ответы:

32

В качестве продолжения ответа на surfasb добавьте флаг -r в конце для recurse:

7z e [archive.zip] -o[outputdir] [fileFilter] -r

Поддержка нескольких фильтров:

7z e [archive.zip] -o[outputdir] [fileFilter_1] [fileFilter_2] -r

Пример:

Командная строка нескольких фильтров:

7z e archive.zip -o outputdir *.xml *.dll -r

PS: я использую 7za.exe вместо 7z.exe. Это фактическая команда, которую я использую в моем сценарии:

7za.exe x archive.zip -o outputdir *.xml *.pdb *.exe *.ocx *.dll -r
zionyx
источник
1
Как я могу добавить несколько файловых фильтров, скажем, .XMLи .zip? Извините, если я угоняю эту тему, я просто не хотел добавлять повторяющийся вопрос.
Fr0zenFyr
1
Должно быть хорошо, разделяя фильтры по пробелам. Смотрите отредактированный ответ выше. :)
zionyx
И как мне извлечь конкретный файл из архива внутри архива? Допустим, файл, который я ищу, это «MyFile.txt» внутри «SubArchive.zip» внутри «MainArchive.zip». Это возможно?
PeterCo
1
@PeterCo, я думаю, что команда может извлечь только SubArchive.zipиз MainArchive.zipв вашем случае. Вы можете запускать прослеживание команды для извлечения MyFile.txtиз SubArchive.zipпосле первоначальной экстракции.
zionyx
13

Вы просто добавляете имя файла в конце.

7z e [archive.zip]-o [outputdir] [fileFilter]

surfasb
источник
1
Как я могу добавить несколько файловых фильтров, скажем, .XMLи .zip? Извините, если я угоняю эту тему, я просто не хотел добавлять повторяющийся вопрос.
Fr0zenFyr
Это другой вопрос @ Fr0zenFyr. Чтобы было ясно, что это не дубликат, вы можете обратиться к этому вопросу самостоятельно, а затем указать, чем он отличается.
music2myear
@ music2myear: спасибо за разъяснения. Лучший ответ от zionyx уже включает решение. Моему комментарию более 2 лет, поэтому было бы разумным предположить, что я либо использовал вышеуказанное решение, либо уже опубликовал вопрос и нашел ответ (кстати, это был мой случай). Мое решенное сообщение написано на SO, и перед тем, как мой комментарий появился здесь, была создана оригинальная тема, поэтому я не смог дать ссылку на этот вопрос. :)
Fr0zenFyr
Примечание: как написано здесь, не ставьте пробел между -o и outputdir.
шут короля
4

Если вы посмотрите на справочную страницу для 7z, то обнаружите, что следующую команду можно использовать для извлечения файла из архива 7z (хотя на странице справки отсутствует использование пути):

7z x <archive> <path to file>

Примеры:

7z x backup.7z *.html
7z x backup.7z folderwithin/myfile.html

В качестве альтернативы вы можете использовать e.

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

Тодд Партридж
источник
2
Это относительный путь в архиве?
music2myear
Да, папка внутри - это папка в корне архива.
шут короля
1

Обратите внимание, что он 7zимеет следующий синтаксис ( обратите внимание на пробелы и кавычки, окружающие "-oMy Folder"опцию установки имени выходной папки, мне потребовались часы, чтобы понять, как я это делал изначально - неправильный путь: * -o "My Folder"*):

7z e "my zip.zip" "-oMy Folder" *.jpg "all of these.*" -r
Альберт Маренчин
источник