Я попытался найти ответ на этот вопрос, но большинство вопросов, связанных с 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*
"
В workInProgress
папки могут содержать разные строки после строки workInProgress
например
workInProgress daily
workInprogress unknown
Для других папок, не содержащих 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
}