Plik wsadowy do rekurencyjnego kopiowania katalogów


123

Czy istnieje sposób na rekurencyjne kopiowanie katalogów w pliku .bat? Jeśli tak, przykład byłby świetny. dzięki.


2
masz na myśli xcopy / s? czy bardziej zaawansowana robocopy?
odnowienie

To może ci pomóc, chociaż to usuwa, możesz łatwo zmienić na kopiowanie zamiast daniweb.com/web-development/threads/61479/ ...
Georges Chitiga

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


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

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?


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.
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.