Estou tentando escrever um arquivo em lote que copie pastas de um local para outro, mas somente se elas existirem em uma terceira pasta.
Isso parece confuso, vou tentar novamente.
Eu tenho as seguintes 3 pastas:
- Atualizações
- Formulários
- Versões prévias
Antes de atualizar a \Applications
estrutura de subpastas com a \Updates
estrutura de subpastas [nova versão], preciso copiar a \Applications
estrutura de subpastas para a \Previous Versions
pasta. Depois de concluído, será necessário copiar a Updates
estrutura de subpastas para a /Applications
pasta.
Cheguei ao seguinte:
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
Porém, isso não funciona, ele copia todas as pastas do AppsRoot para o PVerRoot.
Preciso copiar subpastas de AppsRoot
para PVerRoot
, mas apenas se elas existirem em UpdtRoot
. Eu só preciso copiar APENAS as pastas e subpastas, para que não haja nenhum arquivo.
Responder1
Incluí um script em lote que deve completar o que você explica para copiar todas as subpastas recursivamente de um /Applications
diretório para outro /Previous Versions
, mas SOMENTE se esses mesmos diretórios 'para copiar' existirem no /Updates
diretório.
Itens notáveis
Certifique-se de que
SET NewCopyDir=%CopyDir:C:\Test\Apps\=%
contém osC:\Test\Apps\
caracteres que correspondem aoApplications
caminho completo do diretório, incluindo a barra invertida final. Esta é a lógica que analisa isso para anexar ao final dos/Updates
diretórios e/Previous Versions
para que osXCOPY
comandos copiem esses diretórios de acordo.A
Root
parte dos nomes foi retirada dasSET
variáveis dos diretórios, mas isso realmente não importa, mas eu os reduzi para que parecesse um pouco mais limpo na lógica do script.
Script em lote
@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