2015-04-03 2 views
0

Я просто написал небольшой скрипт, чтобы дать мне список всех папок в моей музыкальной библиотеке, которые не включают Artist.nfo или Album.nfo.Powershell Where-Object исключая результат

Моя структура папок, как: M: \ Жанр \ Исполнитель \ Альбом

Artist.nfo должен быть расположен в художнике, и Album.nfo в папке альбома.

Поскольку я ищу оба файла отдельно, я теперь изо всех сил стараюсь исключить другой .nfo в результатах поиска.

Мои текущие функции поиска:

#region noArtistnfo 
function noArtistnfo 
{ 
    [CmdletBinding()] 
    param ($path) 
    Get-ChildItem $path -recurse | Where-Object { $_.PSIsContainer -eq $True }` 
    | Where-Object { $_.GetFiles().name -notcontains "Artist.nfo"}` 
    | Select-Object FullName | Out-String 
} 
#endregion noArtistnfo 

#region noAlbumnfo 
function noAlbumnfo 
{ 
    [CmdletBinding()] 
    param ($path) 
    Get-ChildItem $path -recurse | Where-Object { $_.PSIsContainer -eq $True }` 
    | Where-Object { $_.GetFiles().name -notcontains "Album.nfo" } | Select-Object FullName | Out-String 
} 
#endregion noAlbumnfo 

Я уже пробовал следующий, но это не дает мне никаких результатов:

Get-ChildItem $path -recurse | Where-Object { $_.PSIsContainer -eq $True }` 
     | Where-Object { $_.GetFiles().name -notcontains "Artist.nfo"}` 
     | Where-Object { -! $_.GetFiles().name -contains "Album.nfo"}` 
     | Select-Object FullName | Out-String 

Что я здесь отсутствует? Можете ли вы сказать мне, как исключить папки, если один из них уже присутствует?

ответ

2

Я не думаю, что вы сможете исключить эти папки. Я бы предложил найти все файлы Artist.nfo и Album.nfo и сравнить их родительскую папку со списком всех папок, и разница должна быть тем, что вы ищете.

Так что получите все папки, сохраните переменную. Получите все объекты Artist.nfo и Album.nfo, а затем сделайте Select -ExpandProperty Directory по результатам и сохраните это во второй переменной. Затем сделайте Compare-Object, чтобы найти папки, в которых отсутствуют файлы nfo.

$AllDirs = Get-ChildItem M:\* -recurse -directory 
$NFOFound = Get-ChildItem M:\* -Include "Artist.nfo","Album.nfo" -recurse | Select -Expand Directory 
Compare-Object $AllDirs -DifferenceObject $NFOFound -Property FullName | Where{$_.SideIndicator -eq "<="} 
+0

да спасибо. Я догадался. это хороший подход. – StUffz