특정 폴더의 디렉터리 트리 및 파일 내용만 복사

특정 폴더의 디렉터리 트리 및 파일 내용만 복사

특정 이름을 가진 하위 폴더에서만 대량의 파일을 보관하려고 합니다. 또한 우리 팀이 보관된 파일에 쉽게 액세스할 수 있도록 원래 폴더 구조를 유지하고 싶습니다.

지금까지 robocopy를 사용하여 특정 파일 이름에 대해 이 작업을 수행하는 방법을 찾았지만 특정 폴더에 대해서는 이 작업을 수행할 수 없는 것 같습니다.

robocopy "c:\folder1[wildcard?]\obsolete" "c:\folder2\" \E

예:

c:\folder1\client1\obsolete\
c:\folder1\client1\obsolete\ (files & folders I'd like to copy)
c:\folder1\client1\project1\
c:\folder1\client1\file.txt
c:\folder1\client2\project1\
c:\folder1\client2\project1\obsolete\ (files & folders I'd like to copy)
c:\folder1\client2\project2\
c:\folder1\client3\obsolete\
c:\folder1\client3\obsolete\ (files & folders I'd like to copy)

결과:

c:\folder2\client1\obsolete\
c:\folder2\client1\obsolete\ (files & folders)
c:\folder2\client2\project1\obsolete\
c:\folder2\client2\project1\obsolete\ (files & folders)
c:\folder2\client3\obsolete\
c:\folder2\client3\obsolete\ (files & folders)

답변1

이 작업을 수행해야 합니다.

@ECHO OFF
SETLOCAL EnableDelayedExpansion



REM **************************************************

SET source_dir=C:\folder1

SET target_dir=C:\folder2

SET wildcard=obsolete

REM **************************************************



FOR /D /R %%G IN ("%source_dir%") DO (
    SET "folder_name=%%G"
    ECHO !folder_name! | FINDSTR /R "%wildcard%" >nul && CALL :copy
)


ECHO. & ECHO. & ECHO. & ECHO. & ECHO. & ECHO Done^^!
PAUSE
EXIT


:copy    
SET target_folder_name=!folder_name:%source_dir%\=!

SET endbit=!target_folder_name:*%wildcard%=!
SET target_folder_name=!target_folder_name:%endbit%=!

SET endbit=!folder_name:*%wildcard%=!
SET folder_name=!folder_name:%endbit%=!

ROBOCOPY "!folder_name!" "%target_dir%\!target_folder_name!" /E
EXIT /B

다음에 옵션을 wildcard추가하지 않는 한 은 대소문자를 구분 합니다 ./IFINDSTR

ECHO !folder_name! | FINDSTR /I /R "%wildcard%" >nul && CALL :copy

관련 정보