폴더를 한 폴더 위치에서 다른 폴더 위치로 복사하는 배치 파일을 작성하려고 하는데 해당 폴더가 세 번째 폴더에 있는 경우에만 가능합니다.
혼란스러울 것 같네요. 다시 시도해 보겠습니다.
다음과 같은 3개의 폴더가 있습니다.
- 업데이트
- 응용
- 이전 버전
\Applications
[새 버전] 하위 폴더 구조로 하위 폴더 구조를 업데이트하기 전에 하위 폴더 구조를 폴더에 \Updates
복사해야 합니다 . 완료되면 하위 폴더 구조를 폴더에 복사해야 합니다 .\Applications
\Previous Versions
Updates
/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 Versions
XCOPY
이름에서 제외된 부분 은 디렉토리의 변수
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