62

Packprogramm 7Zip in der Praxis

Meta

Erstellt: 12. September 2019
Modifiziert: 10. Oktober 2019

Überblick

7-Zip ist ein beliebtes Allround Packproramm, dass mit vielen Formaten umgehen kann. Es enthält einen Dateimanager und Kommandozeilen (CLI) Programme. Details was die Download Datei für Windows beinhaltet ist in der Datei “Readme.txt” im ausgepackten Verzeichnis zu finden.

Die Funktion ist unter GNU LGPL von Igor Pavlov freigegeben und kann als Modul in andere Programme eingebunden werden. Da der Source Code frei ist, kann auch unter Windows selber kompiliert werden. Anleitung dazu hier. In diesem Post gehe ich auf den Einsatz auf der Windows Kommandozeile (CLI) ein. D.h. Cmd und Powershell

7-Zip hat zwei Kommandozeilenprogramme:

  • 7z.exe
  • 7za.exe (a = alone)

Die Version 7za fand ich auf der “Source Forge” Site, wo er mit seinem Projekt gestartet ist. Die heisst “7z1900-extra.7z”. Der Autor hat auch eine weitere CLI Version “7zr” veröffentlicht. Diese unterstützt nur das 7-Zip Format ohne Passwortschutz. Im SDK (lzma) hat es eine 42 KByte grosse Datei, welche nur auspacken kann: “7zDec”. Quasi das Pendant zu der “Unrar.exe” von Winrar.
CLI Hilfe Anzeige

7za.exe unterstützt nur die Formate 7z, lzma, cab, zip, gzip, bzip2, Z and tar. Externe module werden nicht unterstützt. Wie üblich stehen die Details in der Datei “Readme.txt” des ausgepackten Verzeichnisses.

Dieser Post handelt von CLI Beispielen in der Praxis. Der Aufruf des Programmes erfolgt ohne Pfadangabe, da ich alle zusätzlichen Programme (“Tools”) in einem Verzeichnis abgelegt habe, dass in der “Path” Angabe integriert ist.

Syntax

Der Aufruf des Programmes wird über “Funktionen” und “Switches” gesteuert”. Switches sind das Feintuning. Switches werden mit einem Bindestrich angegeben, die Buchstaben der Funktion nicht. Der Aufruf des Programmes ohne weitere Angaben zeigt die Hilfe zum Programm und das Copyright mit Datum der verwendeten Version an.

Funktionen

  • a Add
  • d Delete
  • e Extract
  • h Calculate
  • l List
  • t Test
  • u Update
  • x eXtract with full paths

Einige Switches

  • -h “Help” zeigt Informationen zu den Parametern. Der einzige mir bekannte Switch der ohne Funktion verwendet werden kann.
  • -o[Verzeichnis] Verzeichnis in das die Dateien geschrieben werden
  • -p[Password] Zu setzendes Passwort
  • -y Rückfragen werden mit Ja (“Yes”) beantwortet

Nicht jeder Switch kann für jede Funktion angewendet werden. Ein Studium der Hilfedatei klärt einem auf. Beispiele:

Funktion “a” (Add) - Archiv erstellen

-i (Include)
-m (Method)
-p (Set Password)
-r (Recurse)
-sdel (Delete files after including to archive)
-sfx (create SFX)
-si (use StdIn)
-sni (Store NT security information)
-sns (Store NTFS alternate Streams)
-so (use StdOut)
-spf (Use fully qualified file paths)
-ssw (Compress shared files)
-stl (Set archive timestamp from the most recently modified file)
-t (Type of archive)
-u (Update)
-v (Volumes)
-w (Working Dir)
-x (Exclude)

Funktion “e” (Extract) und “x” (Extract with Tree) - Archiv auspacken

-ai (Include archives)
-an (Disable parsing of archive_name)
-ao (Overwrite mode)
-ax (Exclude archives)
-i (Include)
-m (Method)
-o (Set Output Directory)
-p (Set Password)
-r (Recurse)
-si (use StdIn)
-sni (Store NT security information)
-sns (Store NTFS alternate Streams)
-so (use StdOut)
-spf (Use fully qualified file paths)
-t (Type of archive)
-x (Exclude)
-y (Assume Yes on all queries)

Beispiel 1

Die Dateien eines Verzeichnis wurde in ein Archiv bestehend aus 3 Dateien gepackt:

  • bsp.part1.rar
  • bsp.part2.rar
  • bsp.part3.rar

Nachfolgend verschiedene Möglichkeiten wie sie ausgepackt werden können

Variante 1

CMD

7z e bsp.part1.rar  

Der Inhalt der Archive wird in das lokale Verzeichnis (“WorkDir”) ausgepackt

7za e bsp.part1.rar  

Schlägt fehl. Fehlermeldung: “Can not open the file as archive”.

7z e -o"\kw19\" bsp.part1.rar  

Der Inhalt der Archive wird im lokalen Laufwerk im Root Unterverzeichnis \kw19 geschrieben

7za e -o"\kw19\" bsp.part1.rar  

Schlägt fehl. Fehlermeldung: “Can not open the file as archive”.

Beispiel 2

Die Dateien eines Verzeichnis wurde in ein Archiv bestehend aus 2 Dateien die auf 5 Dateien aufgesplittet wurden:

  • bsp.part1.rar.001
  • bsp.part2.rar.002
  • bsp.part3.rar.003
  • bsp1.part1.rar.001
  • bsp1.part2.rar.002

7Z kann gesplittete Dateien nicht zusammensetzen. Fehlermeldung: “Can not open the file as archive”. Mit 7za müssen zuerst die 2 gesplitteteten Dateien zusammen geführt (“combine”) werden. 7za e bsp.part1.rar.001

oder mit einer Zielverzeichnis Angabe

``
7za e *.part1.rar.001 -o\kw19\

  • steht für irgendetwas das vor dem Text steht. ACHTUNG: *.* versteht 7Zip als alle Dateien mit Erweiterung (.txt / .xlsm / etc.) * alleine ist also gleichbedeutend wie in der Windows Welt *.*
    ``

7za erstellt aus den Datein 001 / 002 / 003 eine normales Archiv mit dem Dateinamen “bsp.part1.rar”. Danach mit dem zweiten Splitt (“bsp1.”) die Datei “bsp.part2.rar”. Diese können wie in Beispiel 1 als Archiv entpackt werden. Über den Befehl “For” kann innerhalb der Shell CMD auch eine grössere Anzahl Dateien in einem Durchgang entpackt werden.

Beispiel 3

Wie sieht es aus, wenn als Shell “Powershell” verwendet wird? Die Eingaben in den vorhergehenden Abschnitten funktionieren und führen zum gleichne Resultat. Natürlich muss für das lokale Verzeichnis der Prefix “." gesetzt werden. D.h. wenn ich eine Datei “bsp.part1.rar” im aktuellen Verzeichnis auspacken will, lautet der Befehl

7za e .\bsp.part1.rar

Wenn mehrere Dateien ausgepackt werden sollen, dann sind die CMDLET von Powershell erheblich mächtiger als ein “For” Befehl der CMD Shell. Nachfolgend sollen alle RAR Dateien des aktuellen sowie der Unterverzeichnisse (“-Recurse”) ausgepackt werden. Jedes Archiv das über mehrere Dateien gepackt ist, beginnt i.d.R. mit einer Datei welche die am Schluss “part1.rar” hat. Davon ausgehend ergibt sich folgender Befehl:

Get-ChildItem -Recurse ".\*part1.rar" | ForEach-Object { 7z e $_ -o"$($_.Directory)\$($_.BaseName)" }
Wenn mit 7za mehrere gesplitte Archive zusammen (“combine”) geführt werden sollen, sieht die Eingabe so aus:

Get-ChildItem -Recurse ".\*.rar.001" | ForEach-Object { 7zA e $_ - }
Die ausgepackten RAR Dateien aus allen Unterverzeichnissen werden in das aktuelle Verzeichnis geschrieben. Wenn die gepackten Dateien in den Unterverzeichnissen identische Namen haben oder man aus anderen Gründen die Dateien in den jeweiligen Verzeichnissen lassen will, muss der Befehl ergänzt werden.

Get-ChildItem -Recurse ".\*.rar.001" | ForEach-Object { 7zA e $_ -o"$_.Directory"}
Für eine bitgenaue Kontrolle des Endresultates kennt das das 7-Zip Programm die Funktion “h”.

Beispiel 4

Ein Verzeichnis, darin die Dateien von 3 Archiven:

  • zuerich.part01.rar .. zuerich.part04.rar
  • bern.part01.rar .. bern.part03.rar
  • genf.part01.rar .. genf.part08.rar

Natürlich will ich auf der CLI alle drei Archive mit einer Eingabe auspacken. Ferner soll jedes Archiv in einem eigenen Verzeichnis sein. Die einzige Lösung die funktionierte war einen Kombination mit dem For Befehl:

for %a in (*.part01.rar) do 7z e *.part01.rar -ox:\kt-stat\%a

Fazit

Die Beispiele wurden während des schreibens mit 7-Zip Version 19 unter Windows 10 positiv getestet.

Quellen

Letzte Änderung September 9, 2019