Назад | Перейти на главную страницу

Использование Robocopy для поиска и копирования каталогов с использованием сопоставления с образцом

Я попытался найти ответ на этот вопрос, но большинство вопросов, связанных с robocopy и сопоставлением с образцом, сосредоточены на исключении папок, тогда как я намерен включить папки.

Предполагая, что у меня есть следующие папки.

c:\workspace\folder1\subfolder1\workInProgress monthly\*
c:\workspace\folder1\subfolder1\completed monthly\*
c:\workspace\folder1\subfolder1\rejected weekly\*

c:\workspace\folder2\subfolder2\workInProgress yearly\*
c:\workspace\folder2\workInProgress documents daily\*
c:\workspace\folder2\subfolder2\completed monthly\*
c:\workspace\folder2\subfolder21\rejected weekly\*

c:\workspace\folder3\subfolder3\workInProgress weekly\*
c:\workspace\folder3\subfolder3\completed daily\*
c:\workspace\folder3\subfolder3\rejected weekly\*

У меня есть сценарий резервного копирования, который выполняет ROBOCOPY команда для каждого каталога, который я хочу сделать резервную копию.

ROBOCOPY "c:\workspace\folder1\subfolder1\workInProgress monthly" D:\folder1\subfolder1\workInProgress documents /COPYALL /B /SEC /E /MIR /Z /XO /XF *.LCK /R:5 /W:5 /LOG+:dSyncFilesMinimal_%vl%_%tl%.txt /IPG:5
ROBOCOPY "c:\workspace\folder2\subfolder2\workInProgress yearly" D:\folder2\subfolder1\workInProgress documents /COPYALL /B /SEC /E /MIR /Z /XO /XF *.LCK /R:5 /W:5 /LOG+:dSyncFilesMinimal_%vl%_%tl%.txt /IPG:5
ROBOCOPY "c:\workspace\folder2\workInProgress daily" D:\folder2\subfolder1\workInProgress documents /COPYALL /B /SEC /E /MIR /Z /XO /XF *.LCK /R:5 /W:5 /LOG+:dSyncFilesMinimal_%vl%_%tl%.txt /IPG:5
ROBOCOPY "c:\workspace\folder3\subfolder3\workInProgress weekly" D:\folder3\subfolder1\workInProgress documents /COPYALL /B /SEC /E /MIR /Z /XO /XF *.LCK /R:5 /W:5 /LOG+:dSyncFilesMinimal_%vl%_%tl%.txt /IPG:5

Каждый раз, когда добавляется новая папка, мне приходится обновлять скрипт, чтобы включить новую папку. Как я могу использовать ROBOCOPY искать workspace папка, чтобы найти любой каталог, содержащий строку workInProgress и скопируйте его в место назначения.

Учитывая, что я знаю, что папка, которую нужно скопировать, будет иметь строку workInProgress в его названии можно запустить одиночный ROBOCOPY команда для рекурсивного поиска c:\workspace каталог и скопируйте в любой каталог, который соответствует шаблону *workInProgress*"

Пример dir используется в FOR цикл с тем, как изменить букву диска при его выводе:

FOR /F "usebackq delims==" %i IN (`dir /s /a:d /b c:\workspace\workInProgress*`) DO @echo "c:%~pi" "d:%~pi"

Что-то вроде этого, вероятно, подойдет вам.

$dirs = GetChildItem -recurse -include "*workinprogress*" | ?{ $_.PsIsContainer }

foreach ($dir in $dirs)
{
ROBOCOPY $dir.FullName D:\folder1\subfolder1\workInProgress documents /COPYALL /B /SEC /E /MIR /Z /XO /XF *.LCK /R:5 /W:5 /LOG+:dSyncFilesMinimal_%vl%_%tl%.txt /IPG:5
}