从目录和子目录仅获取重复文件

时间:2019-01-19 23:59:28

标签: powershell csv unique get-childitem

我正在尝试编写用于查找非唯一文件的脚本。

脚本应使用一个包含数据的.csv文件:文件名,LastWriteTime和Length。然后,我尝试基于该对象创建另一个.csv,该.csv仅包含Name + Length + LastWriteTime组合为非唯一的那些对象。

我尝试了以下脚本,该脚本使用$csvfile包含文件列表:

$csvdata = Import-Csv -Path $csvfile -Delimiter '|'
$csvdata |
    Group-Object -Property Name, LastWriteTime, Length |
    Where-Object -FilterScript { $_.Count -gt 1 } |
    Select-Object -ExpandProperty Group -Unique |
    Export-Csv $csvfile2 -Delimiter '|' -NoTypeInformation -Encoding Unicode

$csvfile由以下人员创建:

{
    Get-ChildItem -Path $mainFolderPath -Recurse  -File |
        Sort-Object $sortMode |
        Select-Object Name, LastWriteTime, Length, Directory |
        Export-Csv $csvfile -Delimiter '|' -NoTypeInformation -Encoding Unicode
}

(Get-Content $csvfile) |
    ForEach-Object { $_ -replace '"' } |
    Out-File $csvfile -Encoding Unicode

但是以某种方式在另一个$csvfile2中只有一个(第一个)非唯一记录。有谁知道如何改进它,以便可以列出所有非唯一记录?

1 个答案:

答案 0 :(得分:0)

您需要使用-Property * -Unique来获得唯一对象的列表。但是,您不能在此处同时使用-Property-ExpandProperty,因为您希望后一个参数应用于输入对象($_),而前一个参数应用于已经存在的输入对象。这些输入对象($_.Group)的扩展属性。

首先扩展属性Group,然后选择唯一对象:

... |
Select-Object -ExpandProperty Group |
Select-Object -Property * -Unique |
...