Copiando a árvore de diretórios e o conteúdo dos arquivos apenas de pastas específicas

Copiando a árvore de diretórios e o conteúdo dos arquivos apenas de pastas específicas

Estou tentando arquivar uma grande quantidade de arquivos apenas de subpastas com um nome específico. Também gostaria de manter a estrutura de pastas original para simplificar o acesso da minha equipe aos arquivos arquivados.

Até agora, descobri como fazer isso para nomes de arquivos específicos usando robocopy, mas não consigo fazer isso funcionar para pastas específicas.

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

exemplo:

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)

Responder1

Isso deve fazer o trabalho:

@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

O wildcardfaz distinção entre maiúsculas e minúsculas, a menos que você adicione a /Iopção a FINDSTR:

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

informação relacionada