Получение только повторяющихся файлов из каталога и подкаталогов - PullRequest
0 голосов
/ 20 января 2019

Я пытаюсь сделать скрипт для поиска неуникальных файлов.

Скрипт должен взять один файл .csv с данными: имена файлов, LastWriteTime и Length.Затем я пытаюсь создать еще один .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 голосов
/ 20 января 2019

Вам нужно использовать -Property * -Unique, чтобы получить список уникальных объектов. Однако здесь нельзя одновременно использовать -Property и -ExpandProperty, поскольку вы хотите, чтобы последний параметр применялся к входным объектам ($_), а первый параметр применялся к уже расширенному свойству этих входных объектов. ($_.Group).

Сначала разверните свойство Group, затем выберите уникальные объекты:

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