폴더가 다른 폴더에 있는 경우에만 폴더를 복사하는 배치 파일 FOR 루프

폴더가 다른 폴더에 있는 경우에만 폴더를 복사하는 배치 파일 FOR 루프

폴더를 한 폴더 위치에서 다른 폴더 위치로 복사하는 배치 파일을 작성하려고 하는데 해당 폴더가 세 번째 폴더에 있는 경우에만 가능합니다.

혼란스러울 것 같네요. 다시 시도해 보겠습니다.

다음과 같은 3개의 폴더가 있습니다.

  • 업데이트
  • 응용
  • 이전 버전

\Applications[새 버전] 하위 폴더 구조로 하위 폴더 구조를 업데이트하기 전에 하위 폴더 구조를 폴더에 \Updates복사해야 합니다 . 완료되면 하위 폴더 구조를 폴더에 복사해야 합니다 .\Applications\Previous VersionsUpdates/Applications

나는 다음과 같은 내용을 얻었습니다.

Setlocal EnableDelayedExpansion

Set UpdtRoot=C:\Test\Updates
Set AppsRoot=C:\Test\Apps
Set PVerRoot=C:\Test\Previous Versions

FOR /d %%i IN ("!UpdtRoot!\*.*") DO xcopy "!AppsRoot!\%%~nxi" "!PVerRoot!\%%~nxi\" /e

하지만 이 방법은 작동하지 않습니다. AppsRoot의 모든 폴더를 PVerRoot로 복사합니다.

AppsRoot하위 폴더를 에서 으로 복사하려면 이 폴더가 필요합니다 PVerRoot. 하지만 에 존재하는 경우에만 해당됩니다 UpdtRoot. 폴더와 하위 폴더만 복사하는 데만 필요하므로 파일이 전혀 없습니다.

답변1

/Applications모든 하위 폴더를 디렉터리에서 디렉터리로 재귀적으로 복사하기 위해 설명하는 내용을 완료해야 하는 배치 스크립트를 포함시켰습니다. /Previous Versions하지만 '복사할' 동일한 디렉터리가 디렉터리에 있는 경우에만 해당됩니다 /Updates.

주목할만한 항목

  • 끝 백슬래시를 포함하여 디렉터리 전체 경로 와 일치하는 문자가 포함되어 SET NewCopyDir=%CopyDir:C:\Test\Apps\=%있는지 확인하세요 . 이는 명령이 그에 따라 해당 디렉터리를 복사하도록 구문 분석하여 및 디렉터리 의 끝에 추가하는 논리입니다 .C:\Test\Apps\Applications/Updates/Previous VersionsXCOPY

  • 이름에서 제외된 부분 은 디렉토리의 변수 Root에서 제외되었지만 SET실제로는 중요하지 않지만 스크립트 로직에서 좀 더 깔끔하게 보이도록 단축했습니다.

배치 스크립트

@ECHO ON

SET "Updt=C:\Test\Updates"
SET "Apps=C:\Test\Apps"
SET "PVer=C:\Test\previous Versions"
IF NOT EXIST "%Updt%" MD "%Updt%"
IF NOT EXIST "%Apps%" MD "%Apps%"
IF NOT EXIST "%PVer%" MD "%PVer%"

FOR /D %%S IN ("%Apps%\*") DO (
    CALL :Routine "%%~S"
)
GOTO :EOF

:Routine
SET CopyDir=%~1
SET NewCopyDir=%CopyDir:C:\Test\Apps\=%
IF EXIST "%Updt%\%NewCopyDir%" XCOPY /E /T "%Apps%\%NewCopyDir%" "%PVer%\%NewCopyDir%\"
GOTO :EOF

지원 리소스

  • 부르다
  • 엑스카피

      /E           Copies directories and subdirectories, including empty ones.
                   Same as /S /E. May be used to modify /T.
    
      /T           Creates directory structure, but does not copy files. Does not
                   include empty directories or subdirectories. /T /E includes
                   empty directories and subdirectories.
    

관련 정보