Kopieren des Verzeichnisbaums und der Dateiinhalte nur bestimmter Ordner

Kopieren des Verzeichnisbaums und der Dateiinhalte nur bestimmter Ordner

Ich versuche, eine große Anzahl von Dateien nur aus Unterordnern mit einem bestimmten Namen zu archivieren. Außerdem möchte ich die ursprüngliche Ordnerstruktur beibehalten, damit mein Team einfach auf die archivierten Dateien zugreifen kann.

Bisher habe ich herausgefunden, wie das mit Robocopy für bestimmte Dateinamen geht, aber für bestimmte Ordner kriege ich es scheinbar nicht hin.

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)

Antwort1

Das hier sollte funktionieren:

@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 beachtet, sofern Sie nicht die /Ifolgende Option hinzufügen FINDSTR:

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

verwandte Informationen