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.

Sarsnake
quelle
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

lc.
quelle
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
Antonio Vinicius Menezes Medei
quelle
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?

Aacini
quelle
4
Gute Idee, aber kopiert Ihr Programm nicht alle Dateien aus Quellverzeichnissen in ein einziges Zielverzeichnis, ohne die Ordnerhierarchie beizubehalten?
Jean-Francois T.