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


34

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

Ответы:


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

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]


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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.