Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powershell 如何使用Get ChildItem在具有特定名称的目录中查找文件?_Powershell_Get Childitem - Fatal编程技术网

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属性,并根据它们确定条件。有时第一种方法是合适的,有时第二种方法是合适的。