Batch file FOR loop to copy folders only if they exist in another folder
I'm trying to write a batch file that copies folders from one root folder to another, but only if they exist in a third folder.
What I'd like to be able to do is copy folders from AppsRoot to PVerRoot, but only if they exist in UpdtRoot.
comment: it's only folders that I need to copy.
Há um script em lote abaixo que deve concluir o que você explica que precisa copiar todas as subpastas recursivamente do diretório /Applications
para o diretório /Previous Versions
, mas SOMENTE se esses mesmos diretórios para copiar existirem no diretório /Updates
.
Notas:
Você precisará garantir que SET NewCopyDir=%CopyDir:C:\Test\Apps\=%
tenha os caracteres C:\Test\Apps\
correspondentes ao caminho completo do diretório Applications
, incluindo a barra invertida final. Esta é a lógica que analisa isso para anexar ao final dos diretórios /Updates
e /Previous Versions
, então os comandos XCOPY
copiarão esses diretórios de acordo.
Eu tirei a parte Root
dos nomes das suas variáveis SET
para os diretórios, mas isso realmente não importa, mas eu os encurtei para que parecesse um pouco mais limpa na lógica do script.
Exemplo de 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
Mais detalhes e recursos
Opções do XCOPY usadas
/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.