it-swarm.com.de

Wie erstelle ich separate Zip-Dateien für jede ausgewählte Datei / jedes ausgewählte Verzeichnis in 7zip?

Dies ist der interne Zip-Packer von Total Commander:

A picture of the Total Commander Zip packer dialogue box.

Ich möchte jedoch meinen 7Zip-Packer verwenden. Wenn ich 5 Dateien auswähle, erhalte ich für jede ausgewählte Datei 5 separate ZIP-Archive. Wie mache ich das in 7zip?

28
Grumpy ol' Bear

Ich bin mir nicht sicher, ob Sie mit der grafischen Benutzeroberfläche das tun können, was Sie vorschlagen, aber Sie können es mit Sicherheit von der Befehlszeile aus tun:

FOR %i IN (*.*) DO 7z.exe a "%~ni.7z" "%i"

Sie müssen zuerst das Verzeichnis (den Befehl cd) in das Verzeichnis F:\Downloads ändern oder in das Verzeichnis, in dem Sie die Massenkomprimierung durchführen möchten. Es ist auch einfach genug, die * .exe-Datei oder die Erweiterung, nach der Sie filtern möchten, zu ersetzen, um nur diese Dokumente zu komprimieren.

Und der geheime Decoderring:

  • %i ist eine Variable, die den Dateinamen für jeden Schritt in der Schleife enthält
  • (*.*) ist das Auswahlkriterium, es könnte leicht * .exe oder ähnliches sein
  • 7z.exe ist die Befehlszeilenversion von 7-Zip
  • %~ni - erweitert die Variable% i nur auf den Dateinamen - keine Erweiterung

Wenn Sie nur die Ordner für ein bestimmtes Verzeichnis hinzufügen möchten, ist der Befehl etwas komplexer, da FOR standardmäßig nur mit Dateien funktioniert. Wir müssen ihm einige zusätzliche Informationen geben:

FOR /F "usebackq delims=?" %i IN (`DIR /B /A:D`) DO 7z.exe a "%i.7z" "%i"

Dies funktioniert aufgrund einiger magischer Dinge:

  • /F weist FOR an, den erweiterten Wert in () zu durchlaufen
  • usebackq teilt FOR mit, dass ich einen Befehl übergeben und die Ausgabe zum Iterieren verwenden werde
  • delims=? teilt FOR mit, dass ich Tokens im ? aufteilen möchte - ein unzulässiges Zeichen in Dateinamen und Verzeichnissen. Ich möchte nur einen Token.
  • Der /B in DIR ist für nacktes Format - nur der Name
  • Der /A:D in DIR dient zur Einschränkung der Ergebnisse nach Attributen, das D steht für Verzeichnisse

Wenn Sie dies in eine Batch-Datei einkapseln möchten, müssen Sie nur die Variable% i doppelt maskieren:

FOR %%i IN (*.*) DO 7z.exe a "%%~ni.7z" "%%i"
49
Goyuix

Ich mag die Antwort von Goyuix. Wenn Sie jedoch Windows 7 verwenden (oder Power Shell installiert haben) und auch die Befehlszeilenversion von 7-Zip, 7za.exe, verwenden, können Sie den folgenden Befehl ausführen:

dir | ForEach-Object { & "7za.exe" a $_.BaseName $_.Name }

Sie können auch "dir" in "dir * .exe" ändern, um nur ausführbare Dateien auszuwählen.

Eine nette Sache bei Power Shell ist, dass Sie mit Objekten anstatt mit Strings arbeiten. Sie könnten also wirklich spezifisch werden, wenn Sie wollten. Zum Beispiel:

dir *.csv | ? { $_.Length -lt 18900 -and $_.LastWriteTime -ge [DateTime] "07/01/2011" } | ForEach-Object { & "7za.exe" a $_.BaseName $_.Name }

Dies schließt nur Dateien ein, die:

  1. habe eine csv-erweiterung
  2. weniger als 18.900 Bytes groß
  3. zuletzt geändert am oder nach dem 01.07.2011

EDIT Wenn Sie Zip-Dateien anstelle von 7-Zip-Dateien verwenden möchten, verwenden Sie InfoZips Zip.exe stattdessen.

12
jftuga

Sie können das 7Zip-Plugin für Total Commander von http://www.ghisler.com/plugins.htm herunterladen und installieren des Fensters von Ihrem Screenshot wird es eine andere Auswahl für die 7Zip-Komprimierung geben. Mit dieser Option können Sie genau das erreichen, wonach Sie suchen.

0
Mxx