powershell Get ChildItem给定多个筛选器
powershell Get ChildItem给定多个筛选器,powershell,Powershell,Get ChildItem的-Filter属性是否有语法允许您同时应用多个筛选器?i、 类似下面的东西,我想找到一些不同但特定的命名为.dll的东西,并在两者中使用通配符 Get ChildItem-Path$myPath-Filter“MyProject.Data*.dll”、“EntityFramework*.dll” 或者我需要将其拆分为多个Get ChildItem调用吗?因为我希望通过管道传递结果。您只能将一个值与-Filter一起使用,而-Include可以接受多个值,例如“.dll
Get ChildItem
的-Filter
属性是否有语法允许您同时应用多个筛选器?i、 类似下面的东西,我想找到一些不同但特定的命名为.dll的东西,并在两者中使用通配符
Get ChildItem-Path$myPath-Filter“MyProject.Data*.dll”、“EntityFramework*.dll”
或者我需要将其拆分为多个Get ChildItem调用吗?因为我希望通过管道传递结果。您只能将一个值与
-Filter
一起使用,而-Include
可以接受多个值,例如“.dll,*.exe”。Get ChildItem
中的-Filter
参数只支持单个字符串/条件AFAIK。有两种方法可以解决您的问题:
您可以使用-Include
参数,该参数接受多个字符串进行匹配。这比-Filter
慢,因为它在cmdlet中执行搜索,而-Filter
在提供级别上执行(在cmdlet获取结果以便处理结果之前)。然而,它很容易写和工作
#You have to specify a path to make -Include available, use .\*
Get-ChildItem .\* -Include "MyProject.Data*.dll", "EntityFramework*.dll"
您还可以使用-Filter
获取所有DLL,然后在where语句中过滤掉所需的DLL
Get-ChildItem -Filter "*.dll" .\* | Where-Object { $_.Name -match '^MyProject.Data.*|^EntityFramework.*' }
您可以在管道中连接过滤器结果,如下所示:
@("MyProject.Data*.dll", "EntityFramework*.dll") | %{ Get-ChildItem -File $myPath -Filter $_ }
我认为值得一提的是,
-Include
只有在与-Recurse
一起使用时才会成功,就像您在示例中所做的那样。@FrodeF。我错过了它,因为它不是粗体、下划线、斜体,并且有一个闪烁的标志,上面写着实时代码。如何找到同时包含MyProject.Data*.dll和EntityFramework*.dll的文件夹?尝试(未测试):Get ChildItem-Filter“*.dll”-递归|组对象目录名| Where对象{($.Group.Name-match'^MyProject\.Data')-和($\u.Group.Name-匹配“^EntityFramework\”)}|选择Object-ExpandProperty Name
你可以使用-Include
而不使用-Recurse
,但是你需要将\*
添加到文件夹中。Get ChildItem folder\*-Include*.xml,*.json
这是一个很好的答案,但是这篇文章已经有将近6年的历史了,还有两个答案和一个公认的答案是不必要的,您可能会在powershell标签中最近未回答的问题中发现更多成功