使用 Robocopy 通过模式匹配来搜索和复制目录

使用 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*

  • 仅带图案的文件夹工作正在进行中
  • 文件workInProgress夹可以在字符串后包含不同的字符串workInProgress,例如

    workInProgress daily workInprogress unknown

  • workInProgress名称中不包含 的其他文件夹没有已知模式。其他文件夹可以包含随机名称。

答案1

dir在循环中使用FOR如何在输出时更改驱动器号的示例:

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

答案2

类似这样的事情可能对你有用。

$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
}

相关内容