Befehlszeilenbefehl zum Kopieren des gesamten Verzeichnisses (einschließlich des Verzeichnisordners) in ein anderes Verzeichnis

68

Über die Befehlszeile möchte ich ein Verzeichnis in ein anderes kopieren. Zum Beispiel gibt es Verzeichnis C:/testund C:/test2.

Ich möchte kopieren C:/testin C:/test2so dass das Ergebnis wird sein ,C:/test2/test

Alles , was ich bisher nur kopieren Sie die Dateien und Ordner in enthaltenen gefunden C:/testin C:/test2, aber das übergeordnete Verzeichnis auslässt.

Scott Chamberlain
quelle
1
versuche xcopy zu benutzen

Antworten:

50

Versuchen Sie es XCOPYmit dem /ESchalter. Mehr Infos hier .

Ich habe diese Informationen nicht von meinem Gehirn in den Zugriff hatte Jahre !

AKTUALISIEREN

Die Dokumentation sagt , dass es kopiert alle Dateien und Unterverzeichnisse aus dem Quellverzeichnis (was bedeutet , dass das übergeordnete Verzeichnis nicht erstellt wird), so würden Sie erstellen müssen testin C:\test2erster und dann verwenden XCOPY.

Vivin
quelle
2
Der Schalter '/ T' auf Xcopy kopiert eine Verzeichnis- und Unterverzeichnisstruktur ohne Dateien.
mfg
2
Besser robocopy /CREATE /COPYALL /DCOPY:T src dst, Sie kopieren nur den Ordner und leere Dateien, behalten aber alle Zeitstempel und andere Attribute bei.
user1016274
2
Dies gibt eigentlich keine Antwort auf die Frage, da der Ordner testnoch erstellt werden muss.
IGRACH
3
@IGRACH Ich dachte, md testund dann mit xcopywar trivial offensichtlich.
Vivin
1
Nun, die Frage ist copy, ob ein Ordner keinen neuen Ordner erstellt und dann Inhalte kopiert.
IGRACH,
35
xcopy c:\test c:\test2\test /s /e /h

Hier gibt es Infos zu XCOPY [ 1 , 2 ]

Hastur
quelle
2
Wie kann ich aufhören, "D" einzugeben?
YumYumYum
2
@YumYumYum: Sie können die Option / I verwenden: "/ I Wenn das Ziel nicht vorhanden ist und mehrere Dateien kopiert werden, wird davon ausgegangen, dass das Ziel ein Verzeichnis sein muss."
Thijs Tijsma
18

Verwenden Sie ROBOCOPY, wenn Sie Sicherungsskripten erstellen. xcopy ist veraltet und wird wahrscheinlich in naher Zukunft nicht mehr verwendet. robocopy kann alles, was xcopy kann. Es ist auch flexibler und zuverlässiger. Das Erstellen von Skripten mit Robocopy ist zukunftssicher.


  1. Verwenden Sie Robocopy, um Ordner einfach zu kopieren. Der Befehl robocopy ersetzt den Befehl xcopy. Es kann schnell ganze Ordner kopieren, ohne sich um die Definition des Inhalts kümmern zu müssen. Geben Sie beispielsweise Folgendes ein, um den gesamten Inhalt des Verzeichnisses C: \ tools in den neuen Ordner D: \ backup \ tools zu kopieren:

    robocopy C:\tools D:\backup\tools /e
    

    Der Modifikator / e weist robocopy an, alle Unterverzeichnisse einzuschließen. Dies schließt leere Ordner ein. robocopy kopiert automatisch versteckte und Systemdateien. Es werden neue Verzeichnisse erstellt, wenn diese am Zielspeicherort nicht vorhanden sind.

  2. Ein Verzeichnis spiegeln. Das Spiegeln eines Verzeichnisses eignet sich hervorragend zum Erstellen von Sicherungen. Die Spiegeloption von Robocopy kopiert den gesamten Inhalt von der Quelle zum Ziel. Es wird dann alles am Ziel gelöscht, was an der Quelle nicht vorhanden ist. Dies stellt sicher, dass Ihre Sicherung nur die neuesten Versionen Ihrer Dateien enthält. Geben Sie beispielsweise Folgendes ein, um C: \ Users \ My Documents in D: \ backup \ My Documents zu spiegeln: [4]

    robocopy "C:\Users\My Documents" "D:\backup\My Documents" /mir
    

    Diese Funktion behält alle Berechtigungen der Originaldateien bei.

  3. Neustart aktivieren. Möglicherweise möchten Sie die Möglichkeit einschließen, den Prozess neu zu starten, falls die Verbindung während des Kopiervorgangs getrennt wird.

    robocopy "C:\Users\My Documents" "D:\backup\My Documents" /z
    
  4. Protokollieren Sie den Kopiervorgang. Mit robocopy können Sie eine Protokolldatei erstellen. Dies kann Ihnen helfen, Probleme zu lokalisieren oder ein Archiv dessen zu erstellen, was kopiert wurde.

    robocopy "C:\Users\My Documents" "D:\backup\My Documents" /log+:<filename>.txt
    

    Der Modifikator / log + hängt die vorhandene Protokolldatei an, anstatt sie zu überschreiben. Wenn Sie nur die alte Protokolldatei überschreiben möchten, verwenden Sie /log:.txt.

Program-Me-Rev
quelle
8

Ich empfehle robocopy gegenüber xcopy , da es viel mehr Optionen gibt, einschließlich intakter Zeitstempel, die ich für wesentlich halte .

Robocopy muss unter XP / 2003 hinzugefügt werden, ist jedoch ab Vista Standard.

Normalerweise verwende ich xxcopy , aber die 64-Bit-Version ist nicht kostenlos.

paradroid
quelle
1
robocopyist ein Windows-Programm. Die Frage betraf DOS.
Grawity
9
@grawity: Die Wahrscheinlichkeit, dass er tatsächlich 16-Bit-DOS verwendet, ist sehr gering, verglichen mit der hohen Wahrscheinlichkeit, dass er CMD 'DOS' nennt, wie es in der realen Welt üblich ist.
Paradroid
Die eigentliche Frage ist: Ist Robocopy ein Microsoft-Programm?
Knocte
@knocte ja, es ist
yossico
5
XCOPY SourceDrive: DestinationDrive: /S /E

Zum Beispiel, wenn Sie Laufwerksdaten über die Befehlszeile oder aus der xboot-Befehlsumgebung E:auf das H:Laufwerk (externe Festplatte) kopieren müssen.

xboot:\>XCOPY E:\ "H:\BackupFolder\" /S /E
Syed Khalid Mohammed
quelle
2
/ S ist nicht erforderlich, wenn / E vorhanden ist. windows-commandline.com/copy-directory-command-line
Giri
3

Wenn die ursprüngliche Frage das ist, wonach ich gesucht habe, dann habe ich und offensichtlich niemand darüber eine klare Lösung gefunden.

Nach was ich suche, ist, das Testverzeichnis in das test2 Verzeichnis zu kopieren, ohne es wieder einzutippen. So etwas wie

xcopy /isvy c:\test d:\test2

Wo d:\test2\testexistiert nicht vor der Kopie, sondern nach. Dies würde beim zweiten Mal in dem Zielpfad einen Tippfehlertest einsparen. Der obige Befehl kopiert alle Dateien und Verzeichnisse in test2, erstellt jedoch kein Testverzeichnis.

Bisher

xcopy /isvy c:\test d:\test2\test

ist wirklich der einzige Weg, den ich gefunden habe, um diesen Job zu erledigen. Auch hier kann bei Tippproblemen nicht garantiert werden, dass das Quell- und das Zielverzeichnis übereinstimmen.

Eine Alternative zur Korrektur ist

set mydir=test&&xcopy /isvy c:\%mydir% c:\test2\%mydir%

Dadurch wird das Zielverzeichnis in der mydirVariablen festgelegt und diese Variable sowohl im Quell- als auch im Zielpfad verwendet. Wenn Sie die Variable falsch eingeben, erhalten Sie entweder eine Fehlermeldung oder das Zielverzeichnis wird wahrscheinlich %am Anfang und am Ende angezeigt.

Es ist länger zu tippen, aber weniger wahrscheinlich, die falschen Namen zu bekommen. Sie werden auffallen.

Rechnung
quelle
Es ist tatsächlich so xcopy /ievy c:\test d:\test2\test, dass die Verzeichnisbaumstruktur beibehalten wird und set mydir=test&xcopy /isvy c:\%mydir% c:\test2\%mydir%nur 1 & ausreicht, da das Ergebnis des Einstellens eines Werts immer erfolgreich ist.
NetwOrchestration
0
xcopy SWITCHES SOURCE DESTINATION

Wo SWITCHESkann sein:

  • So kopieren Sie die gesamte Verzeichnisstruktur:

    /hiev

  • So überschreiben Sie Dateien im Zielordner (falls der Zielordner bereits vorhanden ist):

    /hievry

  • So überschreiben und kopieren Sie auch mit ACL + Attribut:

    /hievxok

Am besten für Ihren Fall geeignet:

xcopy /hievry C:\test C:\test2\test

NetwOrchestration
quelle
0

Ich hatte eine ähnliche Situation, in der ich eine Reihe von Ordnern einschließlich der Ordnernamen an einen Zielspeicherort kopieren musste, und hoffte, dass diese als beantwortet markierte Frage helfen würde, aber das ist nicht der Fall.

Erstens gibt es definitiv Fälle, in denen man diese Fähigkeit benötigt und ich traf auf einen, als ich Ordner aus C: \ Windows \ Assembly \ GAC_MSIL kopieren musste. Windows Explorer weigert sich, diesen Ordner anzuzeigen, daher müssen Sie eine Eingabeaufforderung verwenden.

Wenn Sie mit dem GAC-Ordner vertraut sind, wissen Sie, dass die Ordnernamen nicht trivial sind und bei Tippfehlern leicht verwechselt werden können.

Daher ist das Erstellen des Verzeichnisses im Voraus keine Option - es sei denn, Sie verwenden ein Skript -, das ich letztendlich verwendet habe, da dies die einzige echte Lösung war.

Sichern Sie zuerst die Ordner, die Sie in eine temporäre Datei kopieren möchten. Dies basiert normalerweise auf einem Muster, z

dir /B policy* > Folders.txt

Führen Sie dann eine Schleife über die Einträge im Speicherauszug aus und kopieren Sie sie zum Ziel. Xcopy kümmert sich um die Erstellung eines Ordners, wenn Sie das Zielargument mit einem Backslash (\) beenden.

for /F "tokens=*" %%A in (Folders.txt) do xcopy /E /S %%A C:\Dest\%%A\

Fügen Sie diese beiden Befehle in eine Batch-Datei ein und führen Sie sie aus.

Nun, wenn nur xcopy oder robocopy dies eingebaut hat.

Mahendrent
quelle
0

XCOPY SourceDrive: DestinationDrive: / S / E

Noor All Safaet
quelle
Willkommen bei Super User! Kannst du das erklären? (vor allem die /S /EFahnen)
Bertieb
0

Ich bin zu einer funktionalen alternativen Antwort auf Ihre Frage gekommen.

Erstens wird FORFILESmit dem /SParameter festgelegt, dass jedes Unterverzeichnis in C:\testerreicht wird.

Zweitens ist es mit /Cparameter möglich, eine Befehlskette mit nativen Variablen zu starten, die es ermöglicht, die identischen Verzeichnisse am Ziel zu erstellen und DANN die Dateien unter Verwendung von zwei bedingten Strukturen in diese zu kopieren.

Die erste bedingte Struktur @isdir==TRUE(stellen Sie sicher, dass Sie Großbuchstaben verwenden) ermöglicht es, Verzeichnisse nur aus dem Quellcode abzurufen und sie dann am Ziel mit MKDIR [path]\@relpatham Ende zu erstellen .

Schließlich stellt der zweite @isdir==FALSEBefehl sicher, dass er nur mit Dateien arbeitet , und der Befehl COPY erledigt dann einfach den Job. Dabei werden alle Dateien abgerufen, die mit dem Befehl FORFILES [path]@relpathals Ziel festgelegt wurden, um die Dateien in die gerade erstellten Verzeichnisse zu kopieren.

forfiles /s /c " cmd /c ( if @isdir==TRUE mkdir C:\test\@relpath ) && ( if @isdir==FALSE copy @file C:\test2\@relpath)"

Hoffe das hilft allen hier.

MauGusVicen
quelle