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

0

Estou tentando arquivar uma grande quantidade de arquivos de apenas subpastas com um nome específico. Eu também gostaria de manter a estrutura de pastas original, a fim de manter simples para minha equipe acessar os 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)
    
por Squashman 02.02.2018 / 19:43

1 resposta

1

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 wildcard faz distinção entre maiúsculas e minúsculas, a menos que você adicione a opção /I a FINDSTR :

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

    
por 03.02.2018 / 17:24