【问题标题】:Powershell Where-Object excluding a resultPowershell Where-Object 不包括结果
【发布时间】:2015-04-03 10:31:29
【问题描述】:

我刚刚编写了一个小脚本,为我提供了音乐库中所有文件夹的列表,其中不包括 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 之一,您能告诉我如何排除这些文件夹吗?

【问题讨论】:

    标签: powershell powershell-4.0


    【解决方案1】:

    我认为您无法排除这些文件夹。我的建议是找到所有 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 "<="}
    

    【讨论】:

      猜你喜欢
      • 2018-11-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-07
      相关资源
      最近更新 更多