我有两个驱动器 - 驱动器 D: 和驱动器 F:。这两个驱动器都是本地连接到 Server 2012 计算机的驱动器。驱动器 F 是旧数据存储,由于新驱动器 (D) 较大,因此将其迁移到新驱动器 (D)。
在将文件从 F 同步到 D 之前,已在驱动器 D 上启用了数据重复删除。
Robocopy /MIR 损坏了驱动器 F 上的重复数据删除存储,需要我从旧的 D 驱动器重新同步文件。(具体来说,是任何具有 APL 属性(Archive、ReparsePoint、SparseFile)的文件)。
我遇到的问题是,自切换以来,F 上的某些文件已被写入 - 我试图编写一个脚本来定位这些文件并将它们复制过去,但我想要一个更好的方法来解决这个问题!
目前我有一个脚本,可以搜索具有“ReparsePoint”属性的文件并将其写入文本文件
function Recurse($path) {
$fc = new-object -com scripting.filesystemobject
$folder = $fc.getfolder($path)
foreach ($i in $folder.files) { $i | select Path }
foreach ($i in $folder.subfolders) {
$i | select Path
if ( (get-item $i.path).Attributes.ToString().Contains("ReparsePoint") -
eq $false) {
Recurse($i.path)
}
}
}
$scriptPath = split-path -parent $MyInvocation.MyCommand.Definition
$outputlist = Recurse($scriptPath) | Out-File -Filepath .\filelist.txt
然后我会根据该列表从源存储库复制。理想情况下,我希望它是一个单一脚本!
有没有脚本专家愿意帮忙?
干杯
答案1
下面的效果很好;
Get-ChildItem -Recurse -File |
Where-Object { $_.Attributes -match "ReparsePoint" } |
Foreach-Object {
$currentFileName = $_.FullName
$oldFileName = $currentFileName.replace("D:\", "F:\")
if (Test-Path $oldFileName) {
Copy-Item $oldFileName $currentFileName -Force
Write-Host "Copied $oldFileName to $currentFileName"
}
}