Kopieren der Verzeichnisstruktur und des Dateiinhalts nur bestimmter Ordner

385
Squashman

Ich versuche, eine große Anzahl von Dateien nur aus Unterordnern mit einem bestimmten Namen zu archivieren. Ich möchte auch die ursprüngliche Ordnerstruktur beibehalten, um meinem Team den Zugriff auf die archivierten Dateien zu erleichtern.

Bislang habe ich herausgefunden, wie man dies für bestimmte Dateinamen mit Robocopy ausführt, aber ich kann nicht scheinen, dass dies für bestimmte Ordner funktioniert.

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

Beispiel:

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) 

Ergebnis:

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) 
0

1 Antwort auf die Frage

1
FatalBulletHit

Dies sollte die Arbeit erledigen:

@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 

Die wildcardGroß- und Kleinschreibung wird berücksichtigt, es sei denn, Sie fügen die /IOption hinzu FINDSTR:

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