Wie archiviere ich mit Unterverzeichnissen über die 7-Zip-Befehlszeile? Oder wie BEHALTE ich die Ordnerstruktur während der Archivierung?

16

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?

PrincessPooleRulz
quelle
Möchten Sie nur ausgewählte Dateien (nicht den gesamten Ordnerinhalt) aus den Ordnern G1 und G2 archivieren?
Ankit

Antworten:

12

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

C:\tmp\dir1\file.txt
C:\tmp\dir2\file.txt

Der Befehl erstellt 7z a p.7z -spf @list.txtein Archiv, in dem die absoluten Pfade wie in der Liste gespeichert sind. Alternativ entfernt der Befehl 7z a p.7z -spf2 @list.txtden Laufwerksbuchstaben:

tmp\dir1\file.txt
tmp\dir2\file.txt

Wenn die Datei list.txt ist

dir1\file.txt
dir2\file.txt

Der Befehl 7z a p.7z @list.txtspeichert 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 .

Marco
quelle
Ich habe diese Idee einen Tag lang gesucht. Vielen Dank !
Moshe L
9

Ich habe es geschafft, ein Verzeichnis mit Unterverzeichnissen wie folgt zu archivieren :

7z.exe a - t7z NewArchivePath PathOfFolderToArchive
Eric Roper
quelle
Ich kann nirgendwo einen direkten Link zur 7zA.exe finden (gemäß Ihrem Link). Ist er veraltet und wird durch 7z.exe ersetzt?
PrincessPooleRulz
@ user194767: 7za.exe ist die Befehlszeilenversion .
Karan
und ich würde es gerne verwenden, aber ich kann auf dieser Seite, 7-zip.org/download.html, kein "Gefällt mir" finden. Um es klar zu machen: Mit "Ich kann nirgendwo einen direkten Link zur 7zA.exe finden" meinte ich wirklich: "Bitte geben Sie mir einen direkten Link zu dieser kostenlosen Software!" Vielen Dank!
PrincessPooleRulz
1
@ user194767: Ok, hier ist die aktuelle Version, aber sagst du mir, dass du die 7-Zip-Befehlszeilenversion nirgendwo auf dieser Seite finden konntest?!
Karan
Ich konnte 7zA.exe nicht verwenden, also habe ich versucht, 7z.exe zu verwenden, und es hat funktioniert. Ich bin nicht sicher, wofür das Flag -r verwendet wird, aber es wird nicht zum Archivieren von Unterverzeichnissen benötigt.
Eric Roper
7

Versuchen Sie stattdessen Folgendes:

cd /d C:\
7z a MyArchive.7z G\G1\35antique-shop.mp3
7z a MyArchive.7z G\G2\35antique-shop.mp3
7z a MyArchive.7z G\G1\09saguri.mp3
7z a MyArchive.7z G\G2\09saguri.mp3

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:

C:\path to\file1.ext
D:\path to\file1.ext
E:\path to\file1.ext

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 (OTOH rar a MyArchive.rar @Input.txterledigt den Job einwandfrei ).

Um den Mangel von 7-Zip zu beheben, können Sie eine Batch-Datei wie folgt verwenden:

for /f "tokens=1* delims=\" %%i in (Input.txt) do (
    pushd %%i\
    7z a D:\MyArchive.7z "%%j"
    popd
)

Hinweis: Ersetzen Sie D:\MyArchive.7zdurch 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:

"C:\$$-edrive\F\faithless.-.long.way.mp3"
"C:\$$-edrive\G\Antique Shop.mp3"

oder

"\$$-edrive\F\faithless.-.long.way.mp3"
"\$$-edrive\G\Antique Shop.mp3"

Bearbeiten Sie es dann so, dass es stattdessen so aussieht:

"$$-edrive\F\faithless.-.long.way.mp3"
"$$-edrive\G\Antique Shop.mp3"

Angenommen, alle zu archivierenden Dateien befinden sich unter C:\$$-edrive, navigieren Sie zu C: \ und führen Sie aus 7z 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.

Karan
quelle
Nun, die Antwort war 3/4 ok. RAR funktionierte super, aber Batch-Datei funktionierte soso. Hier ist die Ausgabe, und es wurde nur EINE Datei zu meinem Archiv hinzugefügt, die ohne Leerzeichen im Dateinamen___ C: \ Programme \ zippers \ 7-Zip> (drücken Sie "C: \ c: \ Programme \ zippers \ 7-Zip \ 7z" .exe ac: \ $$ - edrive \ FGH.7z "$$ - edrive \ G \ gattaca_7mp 3_zefen \ gattaca - 03 the one moment.mp3" "popd) 7-Zip 4.65 Copyright (c) 1999-2009 Igor Pavlov 2009 Scannen Aktualisieren des Archivs c: \ $$ - edrive \ FGH.7z Fehler: Datei FGH.7z.tmp kann nicht geöffnet werden Zugriff verweigert. Systemfehler: undefinierter Fehler ===== Am wichtigsten ist vielleicht der Fehler "Zugriff verweigert"?
PrincessPooleRulz
Können Sie Ihrer obigen Frage einige Beispielzeilen (mit und ohne Leerzeichen) aus Ihrer tatsächlichen Listendatei hinzufügen?
Karan
Okay, also habe ich alle Leerzeichen durch Punkte in den Dateinamen ersetzt, aber nicht in den Pfadnamen, die ich jetzt versuchen werde. Die Ausgabe ist weiterhin: C: \ Programme \ Reißverschlüsse \ 7-Zip> (______ Pushd C: _______ c: \ Programme \ Reißverschlüsse \ 7-Zip \ 7z.exe ac: \ $$ - edrive \ FGH.7z "$$ - edrive \ F \ filmmusic_14mp3_foretean \ starcraft .-. starcraft.vs.south.park.mp3 "_______ popd________) ________ Scannen Aktualisieren des Archivs c: \ $$ - edrive \ FGH.7z Fehler: Datei FGH.7z.tmp Access kann nicht geöffnet werden verweigert. Systemfehler: undefinierter Fehler
PrincessPooleRulz
"Ich habe alle Leerzeichen durch Punkte in den Dateinamen ersetzt" - Bedeutet dies, dass Sie die tatsächlichen Dateien umbenannt oder nur die Listendatei bearbeitet haben? Leerzeichen in Dateinamen und Pfaden sollten in Ordnung sein, siehe meine Bearbeitung oben (dh entfernen Sie C: \ aus Ihrer Listendatei und setzen Sie Anführungszeichen um alle Pfade). Jetzt sollten Sie in der Lage sein, 7z direkt anstelle meiner Batchdatei-Problemumgehung zu verwenden.
Karan
1. Ich habe beide umbenannt = = = = = = 2. Ich habe Ihre Änderungen vorgenommen, aber es funktioniert immer noch nicht mit 7z = = = = = = 3. $$ - edrive \ ist in der Tat das einzige Top-Verzeichnis. = = = = = 4. Fehlermeldungen = = = = = = WARNHINWEISE für Dateien: = = = = = $$ - edrive: Das System kann diese Datei nicht finden. = = = = = = = = = "$$ - edrive: Das System kann diese Datei nicht finden. = = = = = = = = = = WARNUNG: Es können keine 2 Dateien gefunden werden = = = = = C: \ Programme \ zippers \ 7-Zip> = = = = = Beachten Sie, dass es zwei Warnungen gibt, und die zweite beginnt mit einem doppelten Anführungszeichen ... Seltsam?
PrincessPooleRulz
0

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.

MT_Head
quelle
Wissen Sie, wie Sie die Ordnerstruktur behalten, während Sie Dateien in ein Archiv komprimieren? Sie sagen, das ist die Standardeinstellung, aber es ist NICHT.
PrincessPooleRulz
@ user194767 - Ich benutze eine Befehlszeile wie diese: %ZDIR%\7z a -t7z -r -mx=1 %ZIP%\mydocu "c:\My Documents\*.*" -wc:\tempWo ZDIRist der Pfad zu 7-Zip und ZIPist das Ziellaufwerk.
MT_Head
0

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:

 C:\G\G1\35antique-shop.mp3
 C:\G\G2\35antique-shop.mp3
 MyArchive.7z C:\G\G1\09saguri.mp3
 MyArchive.7z C:\G\G2\09saguri.mp3

Und dann komprimiere sie alle mit 7z a -r -tzip archive.zip @listfile.txt

Kosinus
quelle
0

Ich habe ein Bat-Skript erstellt, das mit totalcmd "tot-zip.bat" verwendet werden soll:

@echo off
SETLOCAL ENABLEDELAYEDEXPANSION

set "TOP_DIR="D:\Grabovsky""
set "archname="%TOP_DIR%\arch.zip""
set "filelist= "
cd %TOP_DIR%
for %%A in (%*) do (
    set ondisk_path="%%~dpnxA"
    set inarch_path=!ondisk_path:%TOP_DIR%\=!
    echo Putting !ondisk_path! to !inarch_path!.
    set "filelist=!filelist! !inarch_path!"
)
echo filelist: %filelist%

7z.exe a -tzip %archname% %filelist% > NUL
pause

Dann erstellen Sie in totalcmd eine Verknüpfung dafür: Geben Sie hier die Bildbeschreibung ein

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.

Grabantot
quelle