使用 robocopy 将多个文件夹复制到单个目标

使用 robocopy 将多个文件夹复制到单个目标

我正在寻找一种解决方案,使用 robocopy 将目录中的多个文件夹复制到远程网络共享。我想从包含数百个我不感兴趣的文件夹的目录中选择几个文件夹。我想使用正则表达式在 linux 中执行类似于 scp 的操作,但这在 robocopy 中不起作用:

c:\robocopy "c:\results\1319_TC1.*" "\\datastore\somefolder\"

答案1

尝试一下这个:

gci C:\results\1319_TC1.* | foreach-object { robocopy $_.fullname (".\datastore\somefolder\" + $_.name) }

gci C:\results\1319_TC1.*首先获取所有匹配的文件/目录,然后将它们放入管道中,管道foreach-object负责处理第一个命令的所有结果。它将复制每个结果的完整路径(结果目录的完整路径),并将它们放入 .\datastore\somefolder\ 及其原始文件夹名称中,例如:
C:\results\1319_TC1.123456->C:\results\datastore\somefolder\1319_TC1.123456

括号中的内容将目标目录名称和原始文件夹名称放在一起。

编辑:
我刚刚看到您的目标目录应该是 UNC 路径。Robocopy 接受 UNC 路径(即使路径名长度超过 256 个字符)。您只需在我的命令中替换为(".\datastore\somefolder\"("\\datastore\somefolder\"因此正确的命令应该是:

gci C:\results\1319_TC1.* | foreach-object { robocopy $_.fullname ("\\datastore\somefolder\" + $_.name) }

答案2

您可以在批处理文件中执行此操作。每个目录都需要一行。

另外,您可以这样做,将复制所有内容,然后删除多余的内容(如果这样更容易):Robocopy z:\directory d:\directory /MIR /COPYALL(注意:MIR 用于镜像,将覆盖其路径上的所有内容,因此只能在空白目录上使用)。

答案3

仅使用 Robocopy 无法完成此操作。如果您可以访问 Linux 计算机,则使用find-exec选项将非常容易。或者您可以在 Windows 上使用 cygwin(我猜它有 find 命令),或者您可以在 Windows 上使用 Ruby 或 Python 等脚本语言。

答案4

Robocopy 特别不支持包含模式,但它支持排除模式。它还支持仅复制已在目标目录中镜像的文件和文件夹,因此您可以将两者结合起来以实现灵活的解决方案,以仅包含具有特定模式的文件夹。

这个答案改编自 John 的精彩回答:https://community.spiceworks.com/topic/70361-robocopy-folder-wildcard

您希望拥有什么:

robocopy mySrc myDest /S /IncludeFolders 1319_TC1.*

你实际上可以做什么:

  1. robocopy mySrc myDest /E /CREATE
  2. robocopy myDest DeleteMe /E /MOVE /XD 1319_TC1.*
  3. robocopy mySrc myDest /S /XL
  4. rd DeleteMe /s

解释

步骤 1 创建整个源的副本,但所有文件都是 0 字节(没有实际的数据移动)

第 2 步将所有不是目标模式的文件夹移出到某个临时文件夹中(即所有不以 1319_TC1 开头的文件夹)。

步骤 3 进行实际复制,仅将目标中已有的文件从源复制到目标

步骤 4 删除不需要的 0 字节文件

这是一个非常棒的解决方案,因为它只会有效地复制您想要的文件,但大大增加了原始 robocopy 中可用的表现力,天才!

相关内容