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 wildcard
Groß- und Kleinschreibung wird beachtet, sofern Sie nicht die /I
folgende Option hinzufügen FINDSTR
:
ECHO !folder_name! | FINDSTR /I /R "%wildcard%" >nul && CALL :copy