通过两个驱动器之间的扩展名过滤并保留每个文件路径的强大复制大尺寸文件?

Robust copy big size files filtered by extension between two drives and preserving each file-path?

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

我尝试过使用 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 会更好,但如果不可能,我可以从源获取文件哈希并将其与目标进行比较...

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

当您在此循环中使用 $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]' 将 return 数组中的第一个元素。

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