Plik wsadowy do rekurencyjnego kopiowania katalogów

Odpowiedzi:

178

Zajrzyj do xcopy , który będzie rekurencyjnie kopiować pliki i podkatalogi.

2/3 na dole strony zawiera przykłady. Szczególne zastosowanie ma:

Aby skopiować wszystkie pliki i podkatalogi (w tym wszelkie puste podkatalogi) z dysku A na dysk B, wpisz:

xcopy a: b: /s /e

lc.
źródło
16
Prawdopodobnie chcesz, aby flaga / y została dołączona do „Pomija monitowanie o potwierdzenie zamiaru zastąpienia istniejącego pliku docelowego”.
Matthew Lock
11
„xcopy” nie jest dobrym pomysłem, ponieważ są one znane z błędu niewystarczającej ilości pamięci . Spróbuj użyć „robocopy”
Rahul
6
@Rahul Hmm naprawdę? Nigdy tego nie widziałem, ale xcopy z pewnością istnieje od ciemnych wieków. Zamiast tego prawdopodobnie możesz to zrobić Copy-Item -Recursew PowerShell.
lc.
1
Niestety tak, takie zachowanie jest bardzo częste :). Jeśli widziałeś, że dzieje się to regularnie, szczególnie jeśli chcesz skopiować duże ilości danych, takich jak gigantyczne dane.
Rahul
10
Oznacza to , że xcopy jest przestarzałe i że powinno być używane robocopy.
Mike HR
71

Po przeczytaniu komentarzy zaakceptowanej odpowiedzi wypróbowałem polecenie robocopy , które działało dla mnie (używając standardowego wiersza poleceń z Windows 7 64 bity SP 1):

robocopy source_dir dest_dir /s /e
Antonio Vinicius Menezes Medei
źródło
5
Nigdy nie wiedziałem, że `` robocopy '' to polecenie wbudowane w Windows 7! Dzięki za odpowiedź, bardzo pomocny i potężny :)
Anmol Saraf
5
Nie /Eoznacza /S? copy subdirectories, including Empty ones.
mbomb007
4
Hmmm /Si /Ewydaje się sugerować przeciwne rzeczy według /?pomocy robocopy - s to „nie puste” e to „puste”. Myślę, że powinieneś po prostu wybrać jedną.
Stuart Brock
1
W przypadku większości użytkowników myślę, że wystarczy zrobić / e (uwzględnij puste katalogi).
phsource
3
Zwróć uwagę, że robocopyzwraca kod zakończenia 1, jeśli jeden lub więcej plików zostało pomyślnie skopiowanych.
dougnorton
15

Możesz napisać algorytm rekurencyjny w usłudze Batch, który zapewnia dokładną kontrolę nad tym, co robisz w każdym zagnieżdżonym podkatalogu:

@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

Plik wsadowy systemu Windows zapętla się przez katalogi w celu przetwarzania plików?

Aacini
źródło
4
Świetny pomysł, ale czy twój program nie kopiuje wszystkich plików z katalogów źródłowych do jednego katalogu docelowego bez zachowywania hierarchii folderów?
Jean-Francois T.