19

我有一个名为的项目文件夹topfolder,我想在所有子文件夹中找到与特定模式匹配的所有文件,例如,当文件夹foo名称中包含任何位置时,我想列出其中的所有文件。

我试过类似的东西:

gci .\topfolder -rec -filter *foo*

但它有两个问题:

  1. 只有实际包含的文件foo才会被列出(我想要类 foo 文件夹中的任何文件)。
  2. 匹配此过滤器的目录也将成为结果集的一部分。

然后我尝试了这个:

gci .\topfolder\*foo* -include *.*

但这根本不起作用 - 显然通配符仅匹配路径的单个段,因此该模式将匹配topfolder\foobar但不匹配topfolder\subfolder\foobar

到目前为止,我发现的唯一方法是两次使用 Get-ChildItem,如下所示:

gci .\topfolder -rec -include *foo* | where { $_.psiscontainer } | gci

这行得通,但是调用两次似乎很浪费gci,我希望我只是没有找到正确的通配符表达式,例如-Path,-Filter-Include.

最好的方法是什么?

4

1 回答 1

20

我会使用 Filter 参数而不是 Include,它执行得更胖

gci .\topfolder -rec -filter *foo* | where { $_.psiscontainer } | gci
于 2012-04-03T14:42:48.187 回答