我有一个问题,一个初级技术意外删除了一个分区。我们能够恢复一些文件,但不能恢复结构。我们正在恢复一个月的备份磁带上的文件结构和旧文件。我试图将没有结构的新数据与从磁带恢复的旧数据相匹配。
到目前为止,我正在捕获旧的和新的文件属性并将它们存储在变量中。这是我到目前为止获取文件属性的原因。
$newpath = "C:\new"
$oldpath = "C:\old"
$newdata = Get-ChildItem -Recurse $newpath |ForEach-Object {Get-ItemProperty $_} |
Select-Object Name, Directory, LastWriteTime, Fullname,
@{n='Folder';e={Split-Path "$_.Directory" -Parent | Split-Path -Leaf}}
$olddata = Get-ChildItem -Recurse $oldpath |ForEach-Object {Get-ItemProperty $_} |
Select-Object Name, Directory, LastWriteTime, Fullname,
@{n='Folder';e={Split-Path "$_.Directory" -Parent | Split-Path -Leaf}}
这是“新”数据变量的示例(此示例只是一个文件的属性,有2T值的文件):
Name : firefox_2017-01-11_13-58-52.png Directory : C:\New\2017-01\PHX-A LastWriteTime : 1/11/2017 1:58:52 PM FullName : C:\New\2017-01\PHX-A\firefox_2017-01-11_13-58-52.png Folder : PHX-A
这是旧数据的示例:
Name : firefox_2017-01-11_13-58-52.png Directory : C:\old\accounting\some_folder\screenshots_new\2017-01\PHX-A LastWriteTime : 1/11/2017 1:58:52 PM FullName : C:\DROPBOX\Dropbox\001\W\03SCRIPTS\TEMP\screenshots_new\2017-01\PHX-A\firefox_2017-01-11_13-58-52.png Folder : PHX-A
我想匹配文件夹和名称,然后使用Copy-Item $newdata.FullName
复制实际文件到$olddata.FullName
或$olddata.Directory
并覆盖。
有谁知道我怎么能做到这一点?
答案 0 :(得分:1)
从旧数据创建哈希表,使用Name\Folder
作为键,将目录作为值,然后在该哈希表中查找新数据的目标。
$oldpath = ...
$newpath = ...
$olddata = @{}
Get-ChildItem $oldpath -Recurse | ForEach-Object {
$olddata[(Join-Path $_.Directory.Name $_.Name)] = $_.DirectoryName
}
Get-ChildItem $newpath -Recurse | Where-Object {
$key = Join-Path $_.Directory.Name $_.Name
$olddata.ContainsKey($key)
} | ForEach-Object {
Copy-Item $_.FullName $olddata[$key] -Force
}