我今天刚刚开始使用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 }
答案 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}