列出不包含特定文件的目录

时间:2017-06-23 09:24:06

标签: powershell

我正在尝试列出所有不包含与*Quick*install*.pdf匹配的文件的子目录。

我已尝试过以下脚本,但它列出了所有目录。

$a = "F:\Test"

Get-ChildItem -Path $a -recurse *Documents* | Foreach {
    Get-ChildItem -Path $a -recurse | where {$_.psiscontainer} | % {
        if((Get-ChildItem -Path $_.FullName -File).name -notcontains "*Quick*install*"){ 
            $_.FullName 
        }
    }
}

3 个答案:

答案 0 :(得分:1)

您的脚本将列出包含任何非QuickInstall文件的所有目录,即使它们包含QuickInstall本身也是如此。此外,它将为每个文件多次返回目录FullName。试试这个:

Get-ChildItem *documents* -Directory | ForEach-Object {
  if (-not (ls $_.FullName -file -Recurse *Quick*Install*)) {
    write-output $_.FullName
  }
}

答案 1 :(得分:1)

假设您只想处理名称中包含Documents的文件夹

$Base = "F:\Test"
$Search= "*Quick*install*.pdf"

Get-ChildItem -Path $Base -Recurse -Directory -Filter "*Documents*" | 
  Where {(Get-ChildItem -Path $_.FullName -File -Filter $Search).Count -eq 0}|
    Select-Object -Expandproperty FullName

答案 2 :(得分:0)

试试这个

$Base = "F:\Test"
$Search= "*Quick*install*.pdf"

$dirtoexclude=Get-ChildItem $Base -Recurse -File -Filter $Search | select Directory
Get-ChildItem $Base -Recurse -Directory | where FullName -Notin $dirtoexclude.Directory.FullName