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

123

Есть ли способ рекурсивно копировать каталоги внутри файла .bat? Если так, то пример был бы отличным. Спасибо.

sarsnake
источник
2
ты про xcopy / s? или более продвинутый robocopy?
rene
Это может вам помочь, хотя это удаляет, вы можете легко заменить его на копию daniweb.com/web-development/threads/61479/…
Джордж Читига,
См. Также superuser.com/questions/206036/…
еще

Ответы:

178

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

Примеры приведены на 2/3 страницы. Особенно полезны:

Чтобы скопировать все файлы и подкаталоги (включая любые пустые подкаталоги) с диска A на диск B, введите:

xcopy a: b: /s /e

ЖХ.
источник
16
Вероятно, вы захотите включить флаг / y в «Подавляет запрос на подтверждение того, что вы хотите перезаписать существующий файл назначения».
Мэтью Лок
11
«xcopy» - не лучшая идея, потому что они известны своей ошибкой «Недостаточно памяти» . Попробуйте использовать robocopy
Рахул
6
@Rahul Хм, правда? Я никогда не видел, но хсору была , конечно , было вокруг с темных веков. Вы, вероятно, могли бы сделать это и Copy-Item -Recurseв PowerShell.
lc.
1
К сожалению, да, такое поведение очень распространено :). Если вы видели, что это происходит постоянно, особенно если вы хотите скопировать большой объем данных, например гигабайты данных.
Рахул
10
Это говорит о том, что xcopy устарел и следует использовать robocopy.
Майк HR,
71

Прочитав комментарии к принятому ответу, я попробовал команду robocopy , которая у меня сработала (с использованием стандартной командной строки из 64-битной версии Windows 7 SP 1):

robocopy source_dir dest_dir /s /e
Антонио Винисиус Менезес Медеи
источник
5
Никогда не знал, что «robocopy» - это встроенная команда в Windows 7! Спасибо за ответ, очень полезный и мощный :)
Анмол Сараф
5
Не /Eподразумевает /S? copy subdirectories, including Empty ones.
mbomb007
4
Хммм /Sи, /Eпохоже, подразумевают противоположные вещи в соответствии с помощью robocopy /?- s - это «не пустые», e - «пустые». Я думаю, тебе стоит просто выбрать одну.
Стюарт Брок,
1
Для большинства пользователей, я думаю, достаточно сделать / e (включить пустые каталоги).
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 зацикливается на каталогах для обработки файлов?

Aacini
источник
4
Отличная идея, но разве ваша программа не копирует все файлы из исходных каталогов в один целевой каталог без сохранения иерархии папок?
Жан-Франсуа Т.