2013-02-11 4 views
0

을 사용하여 파일 복사 : 재귀 적으로 내부 디렉토리 외부의 디렉토리 구조가 배치 파일

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

은 이제 배치 파일을 사용하여 부모 디렉토리있는 Dir1에 서브 디렉토리 (Dir2라는, Dir3)에있는 모든 파일을 복사합니다. 아래 코드를 생각해 냈지만 완벽하게 작동하지 않습니다.

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

필요가 없습니다 나는 아래의 출력을 얻을. 배치 파일

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

으로

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

을하지만 - 여러 하위 폴더에 동일한 파일 이름을 가질 수 있음을 유의하십시오 당신의있는 Dir1 폴더에서 다음 명령을 실행합니다. Dir1에서 오직 하나만 살아남습니다.

가 위의 당신이있는 Dir1 폴더에서 명령 (또는 스크립트)을 실행하는 것으로 가정 EDIT. 스크립트가 Dir1에 대한 경로를 포함하도록 확장 된 경우 어디서든 실행할 수 있습니다.

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

또는 당신은 배치 파일에 인수로있는 Dir1의 경로를 통과 할 수

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

배치 파일로

. 현재 폴더를 사용하려면 .을 경로로 전달하십시오.

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

하위 폴더에 중복 항목이 없으면이 명령은 각 하위 폴더의 모든 파일을 다른 폴더로 복사합니까? 또한 대상 자체가 자식 폴더이므로이 위치를 새 장소로 이동해야합니다. – Priyam

+0

@Priyam - 예, 파일을 현재 디렉터리로 복사합니다 (나는 그것이 Dir1이라고 가정합니다). 원본 폴더가 Dir1의 하위 폴더 인 한 괜찮습니다. 내 업데이트 답변을 참조하십시오. – dbenham

관련 문제