按数组过滤Get-ChildItem

时间:2011-12-10 08:30:13

标签: powershell

我今天刚刚开始使用PowerShell,我有一个数组中的一些模式的意图列表文件,例如:

$matchPattern = (
                  "SomeCompany.SaaS.Core.Mvc*",
                  "SomeCompany.SaaS.Core.UI.Framework*"
                );

我想列出$sourceDir中上述数组中任何项目匹配的文件。

我能做到这一点,而且有效:

foreach ($item in $matchPattern)
{
    Get-ChildItem $sourceDir | Where-Object {$_.Name -like $item}
}

出于学习目的,我可以用管道衬里做吗?

类似的内容:

Get-ChildItem $sourceDir | Where-Object { $matchPattern -contains $_.Name  }

2 个答案:

答案 0 :(得分:7)

你可以这样做:

gci "$someDir\*" -include $matchPattern

答案 1 :(得分:0)

这样的事情应该有效。

假设一个数组$ a存在,其中包含一些字符串:

gci $someDir | %{$a -eq $_.name}

每当gci找到的目录名与$ a数组中的值匹配时,它就会回显该值。因此,如果$ someDir = C:\并且“windows”是$ a中的元素,那么如果它是唯一的匹配则输出将只是“windows”。

编辑:我的错误,我没有意识到你想要*作为通配符而不是文字,这只匹配文字。解决了以下问题。

对于模式匹配,您可以使用正则表达式数组。像这样定义一个

[regex]$patt = “^(Win.*|.*Files)$”

您现在可以比较上面的所有匹配

gci $someDir | ?{$_.name -match $patt}