我试图find这个答案,但与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
每次添加一个新的文件夹,我必须更新脚本以包含新的文件夹。 如何使用ROBOCOPYsearchworkspace文件夹来查找包含stringworkInProgress任何目录并将其复制到目标位置。
鉴于我知道要复制的文件夹名称中将有stringworkInProgress ,是否有可能运行一个单一的ROBOCOPY命令recursionsearchc:\workspace目录,并复制任何目录匹配模式*workInProgress* “
workInProgress文件夹可以在stringworkInProgress之后包含不同的string
workInProgress daily workInprogress unknown
在其名称中不包含workInProgress其他文件夹上没有已知的模式。 其他文件夹可以包含随机名称。
在FOR循环中使用dir一个示例,其中介绍如何在输出时更改驱动器号:
FOR /F "usebackq delims==" %i IN (`dir /s /a:d /bc:\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 }