2015-04-03 81 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 

缺少什麼我在這裏? 如果有一個.nfo文件已經存在,您可以告訴我如何排除這些文件夾嗎?

回答

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 2015-04-06 12:21:54