Dies ist der interne Zip-Packer von Total Commander:
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?
Dies ist der interne Zip-Packer von Total Commander:
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?
Antworten:
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üssten zuerst das Verzeichnis (den cd
Befehl) in das F:\Downloads
Verzeichnis ändern oder in das Verzeichnis, in dem Sie die Massenkomprimierung durchführen möchten. Es ist auch einfach genug, in * .exe oder einer anderen Erweiterung, nach der Sie filtern möchten, zu ersetzen, um diese Dokumente einfach 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 sein7z.exe
ist die Kommandozeilenversion von 7-Zip%~ni
- Dadurch wird die Variable% i nur auf den Dateinamen erweitert - keine ErweiterungWenn 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 durchlaufenusebackq
teilt FOR mit, dass ich einen Befehl übergeben und die Ausgabe zum Iterieren verwenden werdedelims=?
Sagt FOR, dass ich Tokens aufteilen möchte ?
- ein unzulässiges Zeichen in Dateinamen und Verzeichnissen. Ich möchte nur einen Token./B
Eingang DIR
ist für das reine Format - nur der Name/A:D
In DIR
dient zur Einschränkung der Ergebnisse nach Attributen, das D für VerzeichnisseWenn 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"
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 schöne Sache an Power Shell ist, dass Sie mit Objekten anstelle von Zeichenfolgen arbeiten. Sie könnten also wirklich spezifisch werden, wenn Sie wollten. Beispielsweise:
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:
BEARBEITEN Wenn Sie zip-Dateien anstelle von 7-zip-Dateien verwenden möchten, verwenden Sie stattdessen die zip.exe von InfoZip .
7z a -tzip archive.zip *.exe
Sie können das 7zip-Plugin für Total Commander von http://www.ghisler.com/plugins.htm herunterladen und installieren. Sobald Sie dies auf der rechten Seite des Fensters in Ihrem Screenshot getan haben, wird es eine weitere Auswahl für die 7zip-Komprimierung geben. Mit dieser Option können Sie genau das erreichen, wonach Sie suchen.
Ich habe gerade genau an diesem Problem gearbeitet und eines der Probleme, die ich festgestellt habe, war das Duplizieren des Ordnernamens innerhalb des Archivs, dh beim Komprimieren eines Ordners mit dem Namen "foo" wird ein Archiv erstellt, .\foo\fighters.txt
das statt nur eines enthält fighters.txt
.
Die Antwort lautet daher, in das zu verarbeitende Verzeichnis zu wechseln und das Archiv im vorherigen (Stamm-) Verzeichnis anzuzeigen und dann in dieses Verzeichnis zurückzukehren, um den nächsten Ordner zu verarbeiten.
Es ist auch wichtig, dass 7ZIP vorhandene ZIP- und CMD-Dateien im Stammverzeichnis ignoriert, um zu verhindern, dass sie im Archiv landen, daher die Argumente -x!*.zip
und -x!*.cmd
exclusion.
Dieses Skript verwaltet auch rekursive Ordnerstrukturen.
@echo off
REM Ensures variables set within the batch file are local to
REM this script only and will be removed when finished.
setlocal
if exist *.zip goto zip_exist
for /d %%X in (*) do (
cls
cd /D %%X
"e:\Program Files\7-Zip\7z.exe" a -r -x!*.zip -x!*.cmd "..\%%X.zip" "*.*"
cd ..
)
goto end
:zip_exist
Echo.
Echo Note: for this script to work, compression of
Echo pre-existing zip files is not possible.
:end
pause
Der obige Code sollte in eine Batch-Datei wie "compress_dirs.cmd" kopiert und als admin aus dem Verzeichnis ausgeführt werden, das die zu komprimierenden Ordner enthält.
Hoffe das hilft.