Вы можете использовать PowerShell!
$dupes = gi $args[0] | gci -File -Recurse | group Name | ? {$_.Count -gt 1} gi $args[0] | gci -Directory | ? { $allDupes = $true $hasAny = $false $_ | gci -File | % { $folder = $_ $hasAny = $true If (!($dupes | ? {$_.Name -eq $folder.Name})) {$allDupes = $false} } $allDupes -and $hasAny }
Этот скрипт немного сложен, поэтому давайте внимательно его рассмотрим. Во-первых, он получает папку, указанную в качестве аргумента, рекурсивно находит содержащиеся в ней файлы, группирует их по имени файла, берет только группы с более чем одним элементом (то есть группы, представляющие дублированные песни) и сохраняет эту коллекцию групп в $dupes
, Затем он снова получает указанный родительский каталог, но затем перечисляет только непосредственные подпапки. Он фильтрует их ( ?
), позволяя только тем, которые содержат только дублированные записи, выходить из конвейера и выводиться на экран.
Этот большой блок фильтра занимает большую часть сценария, поэтому давайте рассмотрим его более подробно. Он начинается с двух переменных: одна для отслеживания того, содержит ли текущая папка альбома только дубликаты, а другая для указания, действительно ли в папке есть какие-либо песни. (Я подозреваю, что было бы не очень полезно считать пустые папки как альбомы компиляции.) В нем перечисляются файлы в папке альбома, затем для каждого из них ( %
) проверяется наличие дублирующейся группы, содержащей файл с тем же именем. и, если нет (т.е. ничего не выходит из короткого конвейера внутри If
), указывает на сбой путем установки$allDupes
значение false. Если блок для каждого не работал вообще, то$hasAny
остается ложным. Наконец, большой блок фильтра оценивает, являются ли все элементы в альбоме дубликатами, и действительно ли они там есть. Результат выражения определяет, будет ли папка альбома включена в вывод внешнего конвейера.
Обратите внимание, что некоторые функции PowerShell, используемые в этом сценарии, были представлены в последнее время в умеренной степени. Если вы используете Windows 7, то -File
и -Directory
переключатели не будут работать. Это можно обойти в случае необходимости.
Чтобы использовать скрипт, сохраните его как .ps1
файл, например albumdupes.ps1
. Если вы этого еще не сделали, следуйте инструкциям в разделе «Включение сценариев» вики-тега PowerShell . Затем вы можете запустить его из командной строки PowerShell в каталоге, где вы его сохранили, указав путь к папке вашего исполнителя:
.\albumdupes.ps1 'C:\Users\Ben\Test\albumtest'
Вы получите вывод, как это:
Directory: C:\Users\Ben\Test\albumtest Mode LastWriteTime Length Name ---- ------------- ------ ---- d----- 11/20/2017 2:00 PM Album C d----- 11/20/2017 2:01 PM Album F