powershell Get-ChildItem给出了多个-Filters

Pri*_*cey 9 powershell

是否有允许您同时应用多个过滤器的-Filter属性语法Get-ChildItem?即如下所示我想找到一些不同但具体命名的.dll,并在两者中使用通配符?

Get-ChildItem -Path $myPath -Filter "MyProject.Data*.dll", "EntityFramework*.dll"

或者我是否需要将其拆分为多个Get-ChildItem调用?因为我正在寻找管道结果.

Fro*_* F. 15

-Filter参数Get-ChildItem仅支持单个字符串/条件AFAIK.以下是解决问题的两种方法:

您可以使用-Include接受多个字符串匹配的参数.这比-Filter在cmdlet中进行搜索要慢,而-Filter在提供级别完成(在cmdlet获取结果之前可以处理它们).但是,它易于编写和工作.

#You have to use -Recurse to make -Include available even though it's just a single level search
Get-ChildItem -Include "MyProject.Data*.dll", "EntityFramework*.dll" -Recurse
Run Code Online (Sandbox Code Playgroud)

您还可以使用-Filter获取所有DLL,然后在where语句中过滤掉您想要的DLL.

Get-ChildItem -Filter "*.dll" -Recurse | Where-Object { $_.Name -match '^MyProject.Data.*|^EntityFramework.*' }
Run Code Online (Sandbox Code Playgroud)

  • 我认为值得一提的是,`-Include`只有与`-Recurse`一起使用时才会成功,就像你在你的例子中所做的那样. (5认同)
  • 您可以在不使用 `-Recurse` 的情况下使用 `-Include`,但是您需要将 `\*` 添加到文件夹中。`Get-ChildItem 文件夹\* -Include *.xml,*.json ` (5认同)
  • @FrodeF.我错过了,因为它不是大胆,下划线,斜体,并有一个闪烁的标志,说现场直播代码. (2认同)

小智 13

您可以将过滤结果连接到管道中,如下所示:

@("MyProject.Data*.dll", "EntityFramework*.dll") | %{ Get-ChildItem -File $myPath -Filter $_ }
Run Code Online (Sandbox Code Playgroud)

  • @NicoNekoru 为什么一个旧问题和旧答案会使其不适合回答?如果有的话,应该“鼓励”旧问题的新答案,因为技术在不断发展,并且正在不断实施新的更有效的方法来实现相同的结果。 (5认同)