Powershell 如何使用Get ChildItem在具有特定名称的目录中查找文件?
我有一个名为Powershell 如何使用Get ChildItem在具有特定名称的目录中查找文件?,powershell,get-childitem,Powershell,Get Childitem,我有一个名为topfolder的项目文件夹,我想在所有子文件夹中查找与特定模式匹配的所有文件,例如,当文件夹名称中的任何位置包含foo时,我想列出其中的所有文件 我试过这样的方法: gci .\topfolder -rec -filter *foo* 但它有两个问题: 只有实际包含foo的文件才会被列出(我想要foo-like文件夹中的任何文件) 与此筛选器匹配的目录也将是结果集的一部分 然后我试了一下: gci .\topfolder\*foo* -include *.* 但这根本不起作用
topfolder
的项目文件夹,我想在所有子文件夹中查找与特定模式匹配的所有文件,例如,当文件夹名称中的任何位置包含foo
时,我想列出其中的所有文件
我试过这样的方法:
gci .\topfolder -rec -filter *foo*
但它有两个问题:
foo
的文件才会被列出(我想要foo-like文件夹中的任何文件)gci .\topfolder\*foo* -include *.*
但这根本不起作用-显然,通配符只匹配路径的单个段,因此模式将匹配topfolder\foobar
,而不是topfolder\subfolder\foobar
到目前为止,我发现的唯一方法是使用Get ChildItem两次,如下所示:
gci .\topfolder -rec -include *foo* | where { $_.psiscontainer } | gci
这是可行的,但是调用gci
两次似乎是浪费,我希望我没有找到一个合适的通配符表达式,比如-Path
、-Filter
或-Include
最好的方法是什么?我会使用Filter参数,而不是Include,它的性能更高
gci .\topfolder -rec -filter *foo* | where { $_.psiscontainer } | gci
它与我上一个例子有什么不同?它不会比我的尝试还要慢吗?对不起,我一定是瞎了;)感谢这是一个很好的优化技巧(我甚至不确定-Include和-Filter之间的区别),但是,这是否也意味着仅使用单个gci无法完成此任务?我基本上需要
\toplevel\*foo*
匹配toplevel\subfolder\foobar
。PowerShell是这样工作的吗?文档中说“星型匹配零个或多个字符”,所以我希望第一个星型匹配子文件夹`和第二个
条`以便目录名作为一个整体匹配。然而,情况似乎并非如此。对不起,我弄乱了格式。希望你能理解我的意思,就是这样。如果筛选文件夹,则需要列出它们以获取其内容;如果筛选文件,则需要检查它们的fullname(路径)或directoryName属性,并根据它们确定条件。有时第一种方法是合适的,有时第二种方法是合适的。