Batch-Datei zum rekursiven Kopieren von Verzeichnissen


121

Gibt es eine Möglichkeit, Verzeichnisse rekursiv in eine .bat-Datei zu kopieren? Wenn ja, wäre ein Beispiel großartig. Vielen Dank.


2
du meinst xcopy / s? oder die fortgeschrittenere Robokopie?
— Ren

Dies könnte Ihnen helfen, obwohl dies löscht, können Sie leicht ändern, um stattdessen zu kopieren daniweb.com/web-development/threads/61479/…
— Georges Chitiga

Antworten:


176

Schauen Sie sich xcopy an , das Dateien und Unterverzeichnisse rekursiv kopiert.

Es gibt Beispiele, 2/3 auf der Seite. Von besonderem Nutzen ist:

Geben Sie Folgendes ein, um alle Dateien und Unterverzeichnisse (einschließlich aller leeren Unterverzeichnisse) von Laufwerk A auf Laufwerk B zu kopieren:

xcopy a: b: /s /e


16
Wahrscheinlich möchten Sie auch das Flag / y in "Unterdrückt die Aufforderung zur Bestätigung, dass Sie eine vorhandene Zieldatei überschreiben möchten" einfügen.
— Matthew Lock

11
'xcopy' ist keine gute Idee, da sie bekanntermaßen für unzureichende Speicherfehler bekannt sind . Versuchen Sie es mit 'Robocopy'
— Rahul

6
@ Rahul Hmm wirklich? Ich habe das noch nie gesehen, aber xcopy gibt es schon seit den dunklen Zeiten. Sie könnten dies wahrscheinlich auch Copy-Item -Recursein PowerShell tun .
— lc.

1
Leider ja, dieses Verhalten ist sehr häufig :). Wenn dies immer wieder vorkommt, insbesondere wenn Sie große Datenmengen wie Datenmengen kopieren möchten.
— Rahul

10
Dies besagt, dass xcopy veraltet ist und dass eine Robokopie verwendet werden sollte.
— Mike HR

71

Nachdem ich die Kommentare der akzeptierten Antwort gelesen hatte, versuchte ich den Robocopy- Befehl, der für mich funktionierte (unter Verwendung der Standard-Eingabeaufforderung von Windows 7 64-Bit-SP 1):

robocopy source_dir dest_dir /s /e

5
Ich wusste nie, dass 'Robocopy' ein eingebauter Befehl in Windows 7 ist! Vielen Dank für die Antwort, sehr hilfreich und mächtig :)
— Anmol Saraf

5
Nicht /Ebedeuten /S? copy subdirectories, including Empty ones.
— mbomb007

4
Hmmm /S und /Escheinen entgegengesetzte Dinge zu implizieren, laut der Robocopy- /?Hilfe - s ist "nicht leer" e ist "leer". Ich denke, Sie sollten nur eine auswählen.
— Stuart Brock

1
Für die meisten Benutzer ist es meiner Meinung nach ausreichend, / e auszuführen (einschließlich leerer Verzeichnisse).
— Phsource

3
Beachten Sie, dass robocopy der Exit-Code 1 zurückgegeben wird, wenn eine oder mehrere Dateien erfolgreich kopiert wurden.
— Dougnorton

15

Sie können einen rekursiven Algorithmus in Batch schreiben, mit dem Sie genau steuern können, was Sie in jedem verschachtelten Unterverzeichnis tun:

@echo off
call :treeProcess
goto :eof

:treeProcess
rem Do whatever you want here over the files of this subdir, for example:
copy *.* C:\dest\dir
for /D %%d in (*) do (
    cd %%d
    call :treeProcess
    cd ..
)
exit /b

Windows-Batchdatei, die Verzeichnisse durchläuft, um Dateien zu verarbeiten?


4
Gute Idee, aber kopiert Ihr Programm nicht alle Dateien aus Quellverzeichnissen in ein einziges Zielverzeichnis, ohne die Ordnerhierarchie beizubehalten?
— Jean-Francois T.
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.