繁体   English   中英

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

[英]Get-ChildItem: Show only folders that do not include a specific file

平台上的第一篇文章;-)

场景:我有一个根文件夹,其中包含带有设置相关文件的子文件夹。 某些子文件夹包含更多子文件夹,包含更多文件,子文件夹。 根文件夹或其子文件夹下的每个子文件夹必须包含一个特定文件。

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

我当前的代码看起来像这样:

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

不幸的是,结果非常巨大,它也包括每个子文件夹中的所有文件。 我的愿望:只有根目录下的子文件夹的名称才能检查,因为那个特定的文件不存在。

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

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

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

欢迎来到stackoverflow!

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM