我试图找到这个问题的答案,但大多数与 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
}