
7z x d:\migration\mongo\mongodb.7z o:f:\data *.* -r
Ich verwende diesen Befehl als Teil einer Stapelverarbeitung, um den Inhalt einer 7z-Datei von einem Laufwerk (D) auf ein anderes (F) zu extrahieren. Die Ordnerstruktur ist wichtig, daher verwende ich den x
Befehl mit Rekursion.
Was passieren soll, ist, dass der Archivinhalt in dekomprimiert wird f:\data
.
Was isttatsächlich passiertwird der Inhalt in das Verzeichnis Arbeitsverzeichnis ( ) der Batchdatei dekomprimiert f:\migration\
. Die Angabe von Arbeitsverzeichnis ( -w:
) im Befehl hat keine Auswirkung.
Wie kann ich dafür sorgen, dass mein Befehl wie vorgesehen funktioniert?
Ich verwende 7zip x64 9.22b auf Windows Server 2012 R2.
Bearbeiten: In meiner ursprünglichen Frage wurde darauf hingewiesen, dass Daten an zwei gleichzeitige Orte extrahiert wurden. Wie sich herausstellte, war dies nicht der Fall. Meine Frage wurde aktualisiert, um dies widerzuspiegeln.
Antwort1
Ich verwende 7za.exe (Befehlszeilenversion), aber dasselbe gilt für 7z.exe. Sehen Sie sich die Hilfemeldung ansorgfältig:
7-Zip (A) 9.20 Copyright (c) 1999-2010 Igor Pavlov 2010-11-18
Usage: 7za <command> [<switches>...] <archive_name> [<file_names>...]
[<@listfiles...>]
<Commands>
a: Add files to archive
b: Benchmark
d: Delete files from archive
e: Extract files from archive (without using directory names)
l: List contents of archive
t: Test integrity of archive
u: Update files to archive
x: eXtract files with full paths
<Switches>
-ai[r[-|0]]{@listfile|!wildcard}: Include archives
-ax[r[-|0]]{@listfile|!wildcard}: eXclude archives
-bd: Disable percentage indicator
-i[r[-|0]]{@listfile|!wildcard}: Include filenames
-m{Parameters}: set compression Method
-o{Directory}: set Output directory
-p{Password}: set Password
-r[-|0]: Recurse subdirectories
-scs{UTF-8 | WIN | DOS}: set charset for list files
-sfx[{name}]: Create SFX archive
-si[{name}]: read data from stdin
-slt: show technical information for l (List) command
-so: write data to stdout
-ssc[-]: set sensitive case mode
-ssw: compress shared files
-t{Type}: Set type of archive
-u[-][p#][q#][r#][x#][y#][z#][!newArchiveName]: Update options
-v{Size}[b|k|m|g]: Create volumes
-w[{path}]: assign Work directory. Empty path means a temporary directory
-x[r[-|0]]]{@listfile|!wildcard}: eXclude filenames
-y: assume Yes on all queries
Sie sehen, wie deutlich erwähnt wird, dass die Schalter -o
und sind -w
? Wie in, es gibt eineBindestrichvor den Schaltern, aber nicht vor den Befehlen. AußerdemDoppelpunktIstnichtTeil des Schalters selbst. Wenn das der Fall wäre, hätten Sie ähnlich verwenden sollen, x:
statt nur x
zum Extrahieren mit Pfaden. Folglich ist Ihre seltsame Verwendung von o:<Path>
und w:<Path>
der Grund für Ihre Kopfschmerzen.
Verwenden Sie etwas wie das Folgende, um einen Ordner rekursiv zu komprimieren und relative Pfade zu speichern:
7za a -r Archive.7z C:\InputFolder
Verwenden Sie Folgendes, um in ein bestimmtes Verzeichnis zu extrahieren:
7za x -oD:\OutputFolder Archive.7z
Wenn Ihre Ordnernamen Leerzeichen enthalten, verwenden Sie natürlich doppelte Anführungszeichen.
Antwort2
In meinem Fall hat es in CMD funktioniert, aber nicht in Powershell. Das Angeben des Zielverzeichnisses hat das Problem für mich gelöst.
Folgendes funktioniert in CMD, aber nicht in Powershell
7z x d:\migration\mongo\mongodb.7z -of:\data *.* -r
Das Folgende funktioniert in beiden
7z x d:\migration\mongo\mongodb.7z -o"f:\data" *.* -r