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


123

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


2
ты про xcopy / s? или более продвинутый robocopy?
rene

Это может вам помочь, хотя это удаляет, вы можете легко заменить его на копию daniweb.com/web-development/threads/61479/…
Джордж Читига,

Ответы:


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 зацикливается на каталогах для обработки файлов?


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