Copiar el árbol de directorios y el contenido de los archivos solo de carpetas específicas

Copiar el árbol de directorios y el contenido de los archivos solo de carpetas específicas

Estoy intentando archivar una gran cantidad de archivos solo de subcarpetas con un nombre específico. También me gustaría mantener la estructura de carpetas original para que a mi equipo le resulte sencillo acceder a los archivos archivados.

Hasta ahora, he descubierto cómo hacer esto para nombres de archivos específicos usando robocopy, pero parece que no puedo hacer que esto funcione para carpetas específicas.

robocopy "c:\folder1[wildcard?]\obsolete" "c:\folder2\" \E

ejemplo:

c:\folder1\client1\obsolete\
c:\folder1\client1\obsolete\ (files & folders I'd like to copy)
c:\folder1\client1\project1\
c:\folder1\client1\file.txt
c:\folder1\client2\project1\
c:\folder1\client2\project1\obsolete\ (files & folders I'd like to copy)
c:\folder1\client2\project2\
c:\folder1\client3\obsolete\
c:\folder1\client3\obsolete\ (files & folders I'd like to copy)

resultado:

c:\folder2\client1\obsolete\
c:\folder2\client1\obsolete\ (files & folders)
c:\folder2\client2\project1\obsolete\
c:\folder2\client2\project1\obsolete\ (files & folders)
c:\folder2\client3\obsolete\
c:\folder2\client3\obsolete\ (files & folders)

Respuesta1

Esto debería hacer el trabajo:

@ECHO OFF
SETLOCAL EnableDelayedExpansion



REM **************************************************

SET source_dir=C:\folder1

SET target_dir=C:\folder2

SET wildcard=obsolete

REM **************************************************



FOR /D /R %%G IN ("%source_dir%") DO (
    SET "folder_name=%%G"
    ECHO !folder_name! | FINDSTR /R "%wildcard%" >nul && CALL :copy
)


ECHO. & ECHO. & ECHO. & ECHO. & ECHO. & ECHO Done^^!
PAUSE
EXIT


:copy    
SET target_folder_name=!folder_name:%source_dir%\=!

SET endbit=!target_folder_name:*%wildcard%=!
SET target_folder_name=!target_folder_name:%endbit%=!

SET endbit=!folder_name:*%wildcard%=!
SET folder_name=!folder_name:%endbit%=!

ROBOCOPY "!folder_name!" "%target_dir%\!target_folder_name!" /E
EXIT /B

Distingue wildcardentre mayúsculas y minúsculas, a menos que agregue la /Iopción a FINDSTR:

ECHO !folder_name! | FINDSTR /I /R "%wildcard%" >nul && CALL :copy

información relacionada