2013-02-11 3 views
0

Существует эта структура каталогов:Копирование файлов рекурсивно внутри директории вне используя пакетный файл

Dir1 
--Dir2 
    --File1 
    --File2 
--Dir3 
    --File3 
--File4 
--File5 

Теперь я хочу, чтобы скопировать все файлы в подкаталоге (dir2, DIR3) в родительский каталог Dir1 с помощью пакетных файлов. Я придумал код ниже, но он не работает отлично. Я получаю ниже выход -

Directory2    --It has 4 files all together 
Invalid number of parameters 
Invalid number of parameters 
Does E:\Directory1\Copy\File1.dat specify a file name -- And only this file gets copied 
or directory name on the target 
(F = file, D = directory)? 

код -

@echo off 
call :treeProcess 
Pause 
goto :eof 

:treeProcess 
rem Do whatever you want here over the files of this subdir, for example: 
for /D %%d in (*) do (
    echo %%d 
    cd %%d 
    for %%f in (*) do xcopy %%f E:\Movies\Copy\%%f 
    call :treeProcess 
    cd .. 
) 
exit /b 
+0

Я в основном используя одну строку команда для этого ... Dir1> XCOPY *. */s Dir1 – Kingk

ответ

5

Нет необходимости в пакетном файле. Выполните следующую команду из папки Dir1:

for /r /d %F in (*) do @copy /y "%F\*" 

В пакетном файле

@echo off 
for /r /d %%F in (*) do copy /y "%%F\*" 

НО - Имейте в виду, что вы можете иметь такое же имя файла в нескольких папках детей. Только один выживет в вашем Dir1.

EDIT

выше предполагает, что вы запускаете команду, (или скрипт) из папки Dir1. Его можно запустить из любого места, если скрипт дополнен, чтобы включить путь к Dir1.

for /r "pathToDir1" /d %F in (*) do @copy /y "pathToDir1\%F\*" 

или как пакетный файл

@echo off 
set "root=pathToDir1" 
for /r "%root%" /d %%F in (*) do copy /y "%root%\%%F\*" 

Вы можете пройти путь к Dir1 в качестве аргумента в пакетном файле. Перейдите в . как путь, если вы хотите использовать текущую папку.

@echo off 
for /r %1 /d %%F in (*) do copy /y "%~1\%%F\*" 
+0

Если в любой из дочерних папок нет дубликатов, будет ли эта команда копировать все файлы из каждой дочерней папки в другую папку? Также пункт назначения сам является дочерней папкой, поэтому, я думаю, я должен переместить это на новое место, я думаю? – Priyam

+0

@Priyam - Да, он копирует файлы в текущую директорию (я предполагаю, что это Dir1). Вы в порядке, пока ваши исходные папки являются дочерними элементами Dir1. См. Мой обновленный ответ. – dbenham

Смежные вопросы