Пакетний файл для копіювання каталогів рекурсивно


122

Чи є спосіб копіювання каталогів рекурсивно у файл .bat? Якщо так, то приклад був би чудовим. Дякую.


2
ти маєш на увазі xcopy / s? чи вдосконалену роботокопію?
оновлення

Це може допомогти вам, хоча це видалення ви можете легко змінити, щоб скопіювати замість daniweb.com/web-development/threads/61479/…
Жорж

Дивіться також superuser.com/questions/206036/…
anre

Відповіді:


177

Погляньте на xcopy , який буде рекурсивно копіювати файли та підкаталоги.

Є приклади, 2/3 вниз сторінки. Особливо корисно:

Щоб скопіювати всі файли та підкаталоги (включаючи порожні підкаталоги) з диска A на диск B, введіть:

xcopy a: b: /s /e


16
Ви, мабуть, хочете, щоб прапор / y також включений до "Пригнічує запит на підтвердження, що ви хочете перезаписати існуючий файл призначення."
Метью Лок

11
"xcopy" - це не дуже гарна ідея, оскільки вони, як відомо, славляться недостатньою помилкою пам'яті . Спробуйте скористатись функцією "robocopy"
Рахул

6
@Rahul Хм справді? Я ніколи цього не бачив, але xcopy , безумовно , існував ще з темних віків. Можливо, ви могли б зробити це і Copy-Item -Recurseв PowerShell.
лк.

1
На жаль, так, така поведінка дуже поширена :). Якщо ви бачили, що це відбувається періодично, особливо якщо ви хочете скопіювати велику кількість даних, як-от гіги даних.
Рахул

10
Це говорить про те, що xcopy застаріло і слід використовувати робокопію.
Майк HR

71

Прочитавши коментарі прийнятої відповіді, я спробував команду robocopy , яка працювала на мене (використовуючи стандартний командний рядок Windows 7 64 біт SP 1):

robocopy source_dir dest_dir /s /e

5
Ніколи не знав, що "robocopy" - це вбудована команда в Windows 7! Дякую за відповідь, дуже корисна та потужна :)
Anmol Saraf

5
Не /Eозначає /S? copy subdirectories, including Empty ones.
mbomb007

4
Хммм /Sі, /Eздається, передбачають протилежні речі відповідно до /?довідки з роботокопії - це "не порожні", а "порожні". Я думаю, вам слід просто вибрати один.
Стюарт Брок

1
Для більшості користувачів я вважаю, що це достатньо робити / включати порожні каталоги.
phsource

3
Зауважте, що robocopyповертає код виходу 1, якщо один або більше файлів було успішно скопійовано.
dougnorton

15

Ви можете написати рекурсивний алгоритм в Batch, який дає точний контроль над тим, що ви робите у кожному вкладеному підкаталозі:

@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 через каталоги для обробки файлів?


4
Відмінна ідея, але чи не ваша програма копіює всі файли з вихідних каталогів в єдиний каталог призначення без збереження ієрархії папок?
Жан-Франсуа Т.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.