powershell - 通过两个驱动器之间的扩展名过滤并保留每个文件路径的强大复制大文件?
问题描述
我需要将 *.yxz 文件(大约 500 个文件 20/30gb,每个文件在单独的目录中)从...复制v:\foo\bar\1\baz.xyz, v:\foo\bar\2\etc.xyz
到m:\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 会更好,但如果不可能,我可以从源获取文件哈希并将其与目标进行比较......
我必须手动复制所有文件?
解决方案
当您在此循环中使用 $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 语法,但这应该可以解决循环问题。
推荐阅读
- php - 如何在 PHP foreach 循环中添加和完成标签
- python - 在 Python 中使用 selenium webdriver 单击 Javascript 链接
- javascript - Typeorm throws an error due to Jest mocking
- c# - 按住 Left Shift 时提高玩家移动速度
- javascript - Material UI React - 自动完成 - 如何重置内部状态
- spring - 发生错误时如何创建确认对话框
- java - 如何在不使用 super() 的情况下访问父类的重写方法?
- javascript - JavaScript 事件处理程序不断调用 WebAssembly 函数
- python-3.x - 使用 matplotlib 沿路径放置和插入平面图像
- python - Jinja,基于选择器生成输入值