Powershell Get ChildItem:仅显示不包含特定文件的文件夹

Powershell Get ChildItem:仅显示不包含特定文件的文件夹,powershell,cmd,dir,get-childitem,Powershell,Cmd,Dir,Get Childitem,平台上的第一根柱子;-) 场景:我有一个根文件夹,其中包含与安装程序相关的文件的子文件夹。有些子文件夹包含更多的子文件夹,其中包含更多的文件、子文件夹。根文件夹或其子文件夹下的每个子文件夹必须包含一个特定文件 现在,我想获取直接位于根文件夹下的所有子文件夹,这些子文件夹不包含此特定文件,既不在子文件夹本身中,也不在下面的其他子文件夹中。我只需要根目录下的子文件夹的名称。当然,搜索应该是递归的 我当前的代码如下所示: Get-ChildItem $softwarePath -Recurse | ?

平台上的第一根柱子;-)

场景:我有一个根文件夹,其中包含与安装程序相关的文件的子文件夹。有些子文件夹包含更多的子文件夹,其中包含更多的文件、子文件夹。根文件夹或其子文件夹下的每个子文件夹必须包含一个特定文件

现在,我想获取直接位于根文件夹下的所有子文件夹,这些子文件夹不包含此特定文件,既不在子文件夹本身中,也不在下面的其他子文件夹中。我只需要根目录下的子文件夹的名称。当然,搜索应该是递归的

我当前的代码如下所示:

Get-ChildItem $softwarePath -Recurse | ? Name -notlike "Prefix_*.cmd"

不幸的是,结果是非常巨大的,它还包括每个子文件夹中的所有文件。我的愿望是:只获取根目录下要检查的子文件夹的名称,即特定文件不存在。

欢迎使用stackoverflow

你就快到了。这里是一个解决方案,我首先检索
$softwarePath
的所有子文件夹,然后只选择不包含该文件的子文件夹:

Get-ChildItem $softwarePath -Directory | 
? { -not (Get-ChildItem $_.FullName -Recurse -File -Filter 'Prefix_*.cmd')}

尽管@jisaak的方法完美地解决了您的问题,但您可能会发现为目录结构中的每个文件检索
FileInfo
对象的开销可能会导致脚本需要一些时间来执行

如果是这种情况,您可以通过使用
Directory.GetFiles()
方法仅检索文件名来加快进程:

Get-ChildItem $softwarePath -Directory |Where-Object { 
    -not ([System.IO.Directory]::GetFiles($_.FullName,'Prefix_*.cmd',"AllDirectories"))
}

可能将
-File
参数添加到第二个
gci
callWow!这很好用。谢谢你!你解决了我的问题!谢谢你这么聪明的方法。事实上,它要快一点!