다음과 같은 파일 계층 구조가 있습니다.
RootDir
/A
/fileA.txt
/B
/C
/fileC.txt
/fileB.txt
/otherFile1.txt
/otherFile2.txt
A
하위 디렉터리(예: , B
) 만 복사하고 싶습니다.그 아래 모든 것otherFile1.txt
(즉 및 를 제외하고 모든 것을 복사하고 싶습니다 otherFile2.txt
).
루트 디렉토리 아래에는 2개 이상의 디렉토리와 2개 이상의 파일이 있으므로 각 디렉토리를 이름으로 지정하지 않겠습니다.
어떤 제안이 있으십니까?
답변1
다음의 조합을 사용할 수 있습니다./f에 대해,엑스카피그리고디렉토리이 작업을 수행하려면 다음을 수행하세요.
cd SOURCE
for /F "delims=" %a in ('dir /B /AD') do @xcopy /E "%a" "DESTINATION\%a\"
작동 방식:
일단 입력하면원천디렉토리인 경우 이 명령은
dir /B /AD
모든 디렉토리(/AD
)를 한 줄씩(/B
) 나열합니다.for /F "delims=" %a in ('...') do
명령의 출력을 살펴보고...
변수를%a
출력의 다음 줄로 설정하고 다음에 나오는 모든 것을 실행합니다do
.여기에서
delims=
변수가 전체 줄의 내용을 보유하는지 확인하십시오. 그것이 없으면%a
문자는 첫 번째 공백까지만 유지됩니다.xcopy /E "%a" "DESTINATION\%a\"
현재 지정된 디렉토리를%a
해당 디렉토리에 있는 동일한 이름의 폴더에 복사합니다.목적지. 스위치/E
를 사용하면 디렉터리의 내용도 복사됩니다. 1대상에 디렉터리 이름을 지정하는 것이 중요합니다. 그렇지 않으면 가 (가 아닌 )
fileA.txt
에 복사됩니다 .DESTINATION\fileA.txt
DESTINATION\A\fileA.txt
%a
후행 백슬래시는 파일이 아닌 디렉터리 이름을 나타내는 데 사용됩니다 . 공백이 포함된 디렉터리 이름을 올바르게 처리하려면 큰따옴표가 필요합니다.
이 명령을 배치 파일 내에서 사용하려면 모든 백분율 기호를 두 번째 백분율 기호로 이스케이프해야 합니다. 즉, %a
가 됩니다 %%a
.
1은 /E
빈 디렉토리도 복사합니다. 이것이 바람직하지 않은 경우 대신 사용할 수 있습니다 /S
.
답변2
Dennis 및 David Ruhmann 답변과 유사하지만 FOR /F 대신 FOR /D 루프를 사용합니다.
for /d %F in (rootFolderPath\*) do @xcopy /e /i "%F" "destinationPath\%~nxF"
답변3
내가 생각할 수 있는 가장 좋은 방법은 전체 폴더 구조만 복사하는 Robocopy의 "/create" 스위치와 "길이가 0인 파일만"을 사용하는 것입니다. 이렇게 하면 모든 파일이 제외될 것이라고 확신합니다.
Robocopy /e /create \(폴더 A의 원본 경로) \(대상 경로)
Robocopy /e /create \(폴더 B의 원본 경로) \(대상 경로)
또한 (모두 동일한 파일 형식이거나 소수의 알려진 파일 형식인 경우) "Exclude File" "/xf" 스위치를 사용하고 다음과 같이 파일 형식을 와일드카드로 표시할 수도 있습니다.
Robocopy /e(폴더 A의 원본 경로)(대상 경로) /xf *.txt
Robocopy /e(폴더 B의 원본 경로)(대상 경로) /xf *.txt
답변4
기본 Windows CMD 솔루션. RootDir에서 하위 폴더(및 해당 내용)만 복사합니다.
for /f "delims=" %%A in ('dir RootDir /a:d /b') do xcopy %%A DestDir /e /i