我正在嘗試編寫一個批次文件,將資料夾從一個資料夾位置複製到另一個資料夾位置,但前提是它們存在於第三個資料夾中。
聽起來很混亂,我會再試一次。
我有以下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