Ich habe eine Reihe von Dateien wie diese:
C:\G\G1\35antique-shop.mp3
C:\G\G2\35antique-shop.mp3
C:\G\G1\09saguri.mp3
C:\G\G2\09saguri.mp3
Ich will nur wissen , wie man hält die Ordnerstruktur bei der Archivierung. Dies ist wichtiger als das Duplikat, zu wissen, wie man das löst, wäre ein Bonus.
@Lamb "Möchten Sie nur ausgewählte Dateien (nicht den gesamten Ordnerinhalt) aus den Ordnern G1 und G2 archivieren?"
Das sagt fast alles, aber ich werde versuchen , zu verbessern: Nicht nur , dass ich will bewegen nur einige ausgewählte Dateien in einem Archiv. Ich habe auch eine Liste dieser Dateien, einschließlich Pfadnamen zu jeder Datei.
In SubDir1 gibt es also möglicherweise 10 Dateien, von denen ich drei komprimieren möchte, und in SubDir1 \ sub2 gibt es möglicherweise fünf Dateien, von denen ich alle fünf komprimieren möchte. Die Dateien, die ich archivieren muss, befinden sich in einer Listendatei.
Möglicherweise gibt es doppelte Dateien, daher hoffe ich, dass 7-Zip diese mit hinzugefügten Unterverzeichnissen NICHT als doppelte Dateien ansieht.
Und ich mache es gerne in der Kommandozeile.
Ich habe eine Batch-Datei wie diese ausprobiert:
7z a -r MyArchive.7z C:\G\G1\35antique-shop.mp3
7z a -r MyArchive.7z C:\G\G2\35antique-shop.mp3
7z a -r MyArchive.7z C:\G\G1\09saguri.mp3
7z a -r MyArchive.7z C:\G\G2\09saguri.mp3
Dies bedeutet auch, dass die Dateien 01antique-shop.mp3, 02antique-shop.mp3, .... bis 33antique-shop.mp3 und 34antique-shop.mp3 NICHT archiviert werden sollten.
Die Ordnernamen (= Unterverzeichnisse) wurden MyArchive.7z nicht hinzugefügt, und dies ist das Problem.
Natürlich möchte ich nur ein Kommando mit einer Listendatei verwenden, aber das funktioniert auch nicht.
Ich habe es versucht:
7z a -mx0 -tzip C:\$$-edrive\F-G-H.zip @fgh.txt
Das funktioniert eigentlich ziemlich gut, was die Auswahl angeht, aber es behält NICHT die Verzeichnisstruktur bei. Traurig.
Wie mache ich das?
quelle
Antworten:
Die neueste stabile Version von 7-Zip (15.14) verfügt über den Schalter -spf, der die Speicherung des absoluten Pfads ermöglicht.
Zum Beispiel, wenn die Datei list.txt ist
Der Befehl erstellt
7z a p.7z -spf @list.txt
ein Archiv, in dem die absoluten Pfade wie in der Liste gespeichert sind. Alternativ entfernt der Befehl7z a p.7z -spf2 @list.txt
den Laufwerksbuchstaben:Wenn die Datei list.txt ist
Der Befehl
7z a p.7z @list.txt
speichert die relativen Pfade wie in der Liste in beiden Versionen 9.20 und 15.14.Ich habe mehr Tests mit dem Schalter -spf gemacht. Die Ergebnisse sind hier .
quelle
Ich habe es geschafft, ein Verzeichnis mit Unterverzeichnissen wie folgt zu archivieren :
quelle
Versuchen Sie stattdessen Folgendes:
Das Problem scheint zu sein, dass die Leute seit Jahren nach geeigneten Pfadspeicheroptionen gefragt haben (genau wie nach der Möglichkeit, Archive mit mehreren Volumes zu ändern ), aber der Autor scheint nicht interessiert zu sein. Das ist einer der Gründe, warum ich so oft mit WinRAR angefangen habe.
Wenn Sie eine Listendatei haben, speichert 7-Zip keine Pfade, wenn die zu archivierenden Dateien kein einziges Verzeichnis der obersten Ebene gemeinsam nutzen. Zum Beispiel, wenn Sie Input.txt haben , das Folgendes enthält:
Wenn Sie rennen
7z a MyArchive.7z @Input.txt
, werden Sie feststellen, dass die Pfade vollständig entfernt wurden, was mir völlig rückwärts erscheint (OTOHrar a MyArchive.rar @Input.txt
erledigt den Job einwandfrei ).Um den Mangel von 7-Zip zu beheben, können Sie eine Batch-Datei wie folgt verwenden:
Hinweis: Ersetzen Sie
D:\MyArchive.7z
durch den richtigen Pfad zu Ihrem Zielarchiv. Außerdem sollte die Batchdatei funktionieren, unabhängig davon, ob Sie Pfade in Ihrer Listendatei angegeben haben oder nicht.Bearbeiten: Wenn Ihre Listendatei wie folgt aussieht:
oder
Bearbeiten Sie es dann so, dass es stattdessen so aussieht:
Angenommen, alle zu archivierenden Dateien befinden sich unter
C:\$$-edrive
, navigieren Sie zu C: \ und führen Sie aus7z a C:\MyArchive.7z @C:\Input.txt
. Bei Verwendung einer Listendatei werden die Pfade nur gespeichert , wenn keine Laufwerksbuchstaben vorhanden sind, keine anfänglichen Backslashes vorhanden sind und wenn das Verzeichnis der obersten Ebene (Root) für alle Dateien gleich ist. Für beste Ergebnisse rate ich Ihnen außerdem, MyArchive.7z nicht in C: \ $$ - edrive zu erstellen.quelle
7-Zip sieht sie unabhängig davon als Duplikate und überspringt sie. Wenn es einen Weg gibt, das zu umgehen, habe ich es nie gefunden - ich teile den Job immer nur in mehrere Archive auf.
quelle
%ZDIR%\7z a -t7z -r -mx=1 %ZIP%\mydocu "c:\My Documents\*.*" -wc:\temp
WoZDIR
ist der Pfad zu 7-Zip undZIP
ist das Ziellaufwerk.Ich bin mir nicht sicher, wie ich bei Duplikaten helfen soll. Ich denke jedoch, dass ein bequemeres System als ein Stapel mit einem vollständigen Befehl darin besteht, eine listfile.txt zu erstellen:
Und dann komprimiere sie alle mit
7z a -r -tzip archive.zip @listfile.txt
quelle
Ich habe ein Bat-Skript erstellt, das mit totalcmd "tot-zip.bat" verwendet werden soll:
Dann erstellen Sie in totalcmd eine Verknüpfung dafür:
Wenn Sie dann einige Dateien / Ordner komprimieren und die Ordnerstruktur relativ zu
%TOP_DIR%
Ihnen beibehalten möchten, wählen Sie einfach die benötigten Dateien aus (irgendwo im Inneren%TOP_DIR%
) und drücken Sie die Taste.quelle