Windows 명령줄: 주어진 루트 디렉터리 아래에 파일이 아닌 하위 디렉터리를 복사하는 방법은 무엇입니까?

Windows 명령줄: 주어진 루트 디렉터리 아래에 파일이 아닌 하위 디렉터리를 복사하는 방법은 무엇입니까?

다음과 같은 파일 계층 구조가 있습니다.

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.txtDESTINATION\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

관련 정보