我正在寻找一个解决scheme,使用robocopy从一个目录复制几个文件夹到一个遥远的networking共享。 我想从包含数百个文件夹的目录中select几个文件夹,我不想使用正则expression式,但是这在robocopy中不起作用:
c:\robocopy "c:\results\1319_TC1.*" "\\datastore\somefolder\"
试试这个:
gci C:\results\1319_TC1.* | foreach-object { robocopy $_.fullname (".\datastore\somefolder\" + $_.name) }
gci C:\results\1319_TC1.*
获取所有匹配的文件/目录,并将它们放在pipe道中, foreach-object
负责处理来自第一个命令的所有结果。 它将robocopy每个结果的完整path(完整path到您的结果目录),并将其放在。\ datastore \ somefolder \与其原始文件夹名称例如:
C:\results\1319_TC1.123456
– > C:\results\datastore\somefolder\1319_TC1.123456
大括号中的那个东西会把这个目标目录名和原来的文件夹名放在一起。
编辑:
我刚才看到你的目标目录应该是一个UNCpath。 Robocopy接受UNCpath(即使path名长度超过256个字符)。 你只需在我的命令中用("\\datastore\somefolder\"
replace(".\datastore\somefolder\"
,那么正确的命令是:
gci C:\results\1319_TC1.* | foreach-object { robocopy $_.fullname ("\\datastore\somefolder\" + $_.name) }
你会在batch file中做到这一点。 你将需要在每个目录的行。
或者,你可以做到这一点,这将复制一切,然后删除多余的,如果更容易:Robocopy Z:\目录D:\目录/ MIR / COPYALL(注意:MIR是用于镜像,并将覆盖方法,所以只使用在一个空白的目录)。
你将无法单独使用Robocopy。 如果您有权访问Linux机器,使用-exec
选项find
将非常简单。 或者你可以在Windows上使用cygwin(我猜它有find命令),或者你可以在Windows上使用像Ruby或Python这样的脚本语言。
一个像这样的快速powershell:
$Dir = get-childitem "c:\results\" -recurse $List = $Dir | where {$_.FullName -match "1319_TC1."} $List | split-path FullName -parent | get-unique
将提供一个与“1319_TC1”匹配的文件夹中的所有文件的列表。 然后,您需要对每个文件夹进行robocopy
。
去以下几点:
for /d %d in (c:\results\1319_TC1.*) do robocopy "%d" "\\datastore\somefolder\%~nxd" /E /W:0 /R:0 /XO /XJ
这里我们使用Windows命令for
配合/d
1319_TC1.*
来遍历1319_TC1.*
所有目录,并且for命令会将每个目录名,完整的path名c:\results\1319_TC1.*
..逐个存储在variables%d
。
在%~nxd
的帮助下,我们将整个path中的文件夹名称和扩展名分开,并将其传递给robocopy,以确保在\\datastore\somefolder
的目标位置创build相同的文件夹。
根据自己的口味select你的robocopy开关。
在这种情况下, for
命令允许您input并传递显式名称到另一个命令robocopy
。 以下是将john
和paul
用户configuration文件复制到datastore
的示例。 我首先转到源文件夹cd c:\users
列出没有完整path名称的源文件夹名称:
cd c:\users for /d %d in (john,paul) do robocopy "%d" "\\datastore\somefolder\%d" /E /W:0 /R:0 /XO /XJ
我知道这是一个6岁的问题的答案,但所有以前的答案是kludges。 由于这是谷歌最重要的结果,我以为我会提出正确的解决scheme来解决具体的问题。
c:\robocopy "c:\results\1319_TC1.*" "\\datastore\somefolder\"
您不能select多个源目录。 但是,目录是文件。
如果您具有.\folder1\folder3\
, .\folder1\folder4
和.\folder2
使用robocopy将folder3和folder4复制到folder2的正确语法是:
robocopy folder1 folder2 folder* /e
/ e将移动所有目录。
这是它变得有趣的地方。 要控制要复制的目录,您不包含列表或通配符以select要复制的目录,请使用/ XD并使用列表或通配符排除不想复制的目录。