首页 > 解决方案 > 通过两个驱动器之间的扩展名过滤并保留每个文件路径的强大复制大文件?

问题描述

我需要将 *.yxz 文件(大约 500 个文件 20/30gb,每个文件在单独的目录中)从...复制v:\foo\bar\1\baz.xyz, v:\foo\bar\2\etc.xyzm:\foo\bar\1\baz.xyz, m:\foo\bar\2\etc.xyz... dest dirs 包含其他文件...

我尝试过使用 powershell,但不幸的是不起作用:

$mylist = Get-ChildItem -Path "v:\" -File -Recurse | Where-Object {( $_.Extension -match ".xyz" )}

$src = $mylist.FullName

$dst = $src | Split-Path
 
$dst = $dst.replace('V:','M:')

foreach ( $line in $src ) { robocopy/copy-item $line $dst }

Robocopy 会更好,但如果不可能,我可以从源获取文件哈希并将其与目标进行比较......

我必须手动复制所有文件?

标签: powershellrobocopyfile-copying

解决方案


当您在此循环中使用 $dst 时,您每次都会调用整个目的地数组。相反,您应该将第一个源与第一个目的地一起使用,依此类推。你可以使用这样的东西:

foreach($line in (0..(($src.length)-1))) { robocopy $src[$line] $dst[$line] }

$line in (0..(($src.length)-1))

这将遍历数组 '$src' 中的每个元素,并将 '$line' 设置为等于索引。

{ robocopy $src[$line] $dst[$line] }    

这通过放置索引来调用数组中的元素。例如 '$src[0]' 将返回数组中的第一个元素。

我无法检查 robocopy 语法,但这应该可以解决循环问题。


推荐阅读