Powershell Where-Object不包括结果

时间:2015-04-03 01:57:01

标签: powershell powershell-v4.0

我刚刚编写了一个小脚本,为我提供了音乐库中所有文件夹的列表,其中不包含Artist.nfo或Album.nfo。

我的文件夹结构如下:M:\ Genre \ Artist \ Album

Artist.nfo应位于Artist中,Album.nfo应位于Album文件夹中。

由于我正在单独搜索这两个文件,我现在正在努力排除搜索结果中的其他.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已经存在,你能告诉我如何排除文件夹吗?

1 个答案:

答案 0 :(得分: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 "<="}