比较两个变量并从每个

时间:2017-01-14 18:09:48

标签: powershell

我有一个问题,一个初级技术意外删除了一个分区。我们能够恢复一些文件,但不能恢复结构。我们正在恢复一个月的备份磁带上的文件结构和旧文件。我试图将没有结构的新数据与从磁带恢复的旧数据相匹配。

到目前为止,我正在捕获旧的和新的文件属性并将它们存储在变量中。这是我到目前为止获取文件属性的原因。

$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并覆盖。

有谁知道我怎么能做到这一点?

1 个答案:

答案 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
}