Eu usaria um arquivo de lote,
- como um
/s
dir recursivo só pode ter um nome - findstr é usado para corresponder apenas as linhas que terminam com as duas dirs
- na cadeia encontrada do diretório, o nome base é trocado por dest para formar o nome da pasta de destino adequada.
@Echo off&SetLocal EnableExtensions EnableDelayedExpansion
Set "Base=C:\Projects\"
Set "Dest=C:\backup\"
Set "Dir1=app"
Set "Dir2=src"
For /f "delims=" %%A in (
'Dir /B/S/AD "%Base%\%Dir2%" ^|findstr /LEI "\%Dir1%\%Dir2%" '
) Do (
Set "CopyTo=%%A"
Set "CopyTo=!CopyTo:%Base%=%Dest%!\"
If not Exist "!CopyTo!" Echo MD "!CopyTo!"
Echo robo/x/copy "%%~fA\*" "!CopyTo!"
)
Se a saída parecer OK, remova os ecos nas duas últimas linhas e ajuste o comando de cópia.