Wyodrębnij określony plik z archiwum za pomocą 7-Zip z wiersza polecenia

34

Jeśli mam na przykład archiwum some.zipzawierające jeden lub więcej plików, jak mogę wyodrębnić tylko jeden plik (znam nazwę pliku) za pomocą 7-Zip z wiersza poleceń w systemie Windows?

Kiesoo
źródło

Odpowiedzi:

32

W odpowiedzi na odpowiedź surfasb dodaj flagę -r na końcu, aby się powtórzyć:

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

Obsługa wielu filtrów:

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

Przykład:

Wiersz polecenia wielu filtrów:

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

PS: Używam 7za.exe zamiast 7z.exe. Oto rzeczywiste polecenie, którego używam w skrypcie:

7za.exe x archive.zip -o outputdir *.xml *.pdb *.exe *.ocx *.dll -r
zionyx
źródło
1
Jak mogę dodać wiele filtrów plików, powiedzmy .XMLi .zip? Przepraszam, jeśli przejmuję ten wątek, po prostu nie chciałem dodać duplikatu pytania.
Fr0zenFyr
1
Powinno być dobrze, oddzielając filtry spacją. Zobacz edytowaną odpowiedź powyżej. :)
zionyx
Jak wyodrębnić określony plik z archiwum w archiwum? Powiedzmy, że plik, którego szukam, to „MyFile.txt” wewnątrz „SubArchive.zip” wewnątrz „MainArchive.zip”. czy to możliwe?
PeterCo
1
@PeterCo, myślę, że polecenie może wydobyć tylko SubArchive.zipz MainArchive.ziptwojego przypadku. Można uruchomić Kontynuacja polecenia do ekstraktu MyFile.txtz SubArchive.zippo wstępnej ekstrakcji.
zionyx
13

Po prostu dodajesz nazwę pliku na końcu.

7z e [archive.zip]-o [katalog wyjściowy] [fileFilter]

surfasb
źródło
1
Jak mogę dodać wiele filtrów plików, powiedzmy .XMLi .zip? Przepraszam, jeśli przejmuję ten wątek, po prostu nie chciałem dodać duplikatu pytania.
Fr0zenFyr
To inne pytanie @ Fr0zenFyr. Aby wyjaśnić, że nie jest to duplikat, możesz odnieść się do tego pytania we własnym zakresie, a następnie określić, jak twoje jest inne.
music2myear
@ music2myear: Dziękujemy za wyjaśnienie. Najczęściej głosowana odpowiedź zionyx zawiera już rozwiązanie. Mój komentarz ma ponad 2 lata, więc rozsądne byłoby przypuszczenie, że albo użyłem powyższego rozwiązania, albo opublikowałem już pytanie i znalazłem odpowiedź (BTW, to był mój przypadek). Mój rozstrzygnięty post jest na SO, a oryginalny wątek został utworzony przed opublikowaniem mojego komentarza , więc nie mogłem utworzyć łącza do tego pytania. :)
Fr0zenFyr
Uwaga: jak tu napisano, nie należy umieszczać spacji między -o a katalogiem wyjściowym.
Błazen króla,
4

Jeśli spojrzysz na stronę podręcznika dla 7z, przekonasz się, że do wypakowania pliku z archiwum 7z można użyć następującego polecenia (chociaż na stronie podręcznika brakuje użycia ścieżki):

7z x <archive> <path to file>

Przykłady:

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

Alternatywnie możesz użyć e.

Linii poleceń użytkownicy wersji przypomnienie wydaje się mieć więcej informacji na temat rzeczywistego zużycia.

Todd Partridge
źródło
2
Czy to ścieżka względna w archiwum?
music2myear
Tak, „folderwithin” to folder w katalogu głównym archiwum.
Błazen króla,
1

Zauważ, że 7zma następującą składnię (obserwuj spacje i cudzysłowy otaczające "-oMy Folder"opcję ustawienia nazwy folderu wyjściowego, zajęło mi wiele godzin, aby dowiedzieć się, jak to pierwotnie zrobiłem - w niewłaściwy sposób: * -o "My Folder"*):

7z e "my zip.zip" "-oMy Folder" *.jpg "all of these.*" -r
Albert Marenčin
źródło