Estoy intentando escribir un archivo por lotes que copie carpetas de una ubicación de carpeta a otra, pero solo si existen en una tercera carpeta.
Suena confuso, lo intentaré de nuevo.
Tengo las siguientes 3 carpetas:
- Actualizaciones
- Aplicaciones
- Versión anterior
Antes de actualizar la \Applications
estructura de subcarpetas con la \Updates
estructura de subcarpetas [nueva versión], necesito copiar la \Applications
estructura de subcarpetas a la \Previous Versions
carpeta. Una vez que esté completo, deberá copiar la Updates
estructura de la subcarpeta a la /Applications
carpeta.
Llegué hasta lo siguiente:
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
Sin embargo, esto no funciona, copia todas las carpetas de AppsRoot a PVerRoot.
Lo necesito para copiar subcarpetas de AppsRoot
a PVerRoot
, pero solo si existen en UpdtRoot
. Solo lo necesito para copiar SOLAMENTE las carpetas y subcarpetas, por lo que no hay ningún archivo.
Respuesta1
He incluido un script por lotes que debería completar lo que explica para copiar todas las subcarpetas de forma recursiva del /Applications
directorio al /Previous Versions
directorio, pero SÓLO si esos mismos directorios 'para copiar' existen en el /Updates
directorio.
Artículos notables
Asegúrese de que
SET NewCopyDir=%CopyDir:C:\Test\Apps\=%
tenga losC:\Test\Apps\
caracteres que coincidan con laApplications
ruta completa del directorio, incluida la barra invertida final. Esta es la lógica que analiza eso para agregarlo al final de los/Updates
directorios y/Previous Versions
para que losXCOPY
comandos copien esos directorios en consecuencia.La
Root
parte de los nombres se eliminó de lasSET
variables de los directorios, pero eso realmente no importa, pero los acorté para que se viera un poco más limpio en la lógica del script.
Guión por lotes
@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