Copier l'arborescence de répertoires et le contenu des fichiers de dossiers spécifiques uniquement

0

J'essaie d'archiver une grande quantité de fichiers à partir de sous-dossiers portant un nom spécifique. J'aimerais également conserver la structure de dossiers d'origine afin que mon équipe puisse accéder facilement aux fichiers archivés.

Jusqu'ici, j'ai trouvé comment faire cela pour des noms de fichiers spécifiques en utilisant robocopy, mais je n'arrive pas à obtenir que cela fonctionne pour des dossiers spécifiques.

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

exemple:

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)

résultat:

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)
Squashman
la source

Réponses:

1

Cela devrait faire le travail:

@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

La wildcardest sensible à la casse, sauf si vous ajoutez l' /Ioption à FINDSTR:

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

FatalBulletHit
la source