【发布时间】:2016-12-12 18:28:41
【问题描述】:
我已经用头撞墙好几个小时了,正在寻求帮助。为了简化我的问题,我有两个数组,一个包含通配符,另一个使用这些通配符:
$WildCardArray = @("RED-*.htm", "*.yellow", "BLUE!.txt", "*.green", "*.purple")
$SpelledOutArray = @("RED-123.htm", "456.yellow", "BLUE!.txt", "789.green", "purple.102", "orange.abc")
我无法让 PowerShell 识别这些匹配。
我的最终目标是得到一个输出,告诉我purple.102 和orange.abc 不在$WildCardArray 中。
看起来超级简单!我尝试过的一些事情:
$WildCardArray = @("RED-*.htm", "*.yellow", "BLUE!.txt", "*.green", "*.purple")
$SpelledOutArray = @("RED-123.htm", "456.yellow", "BLUE!.txt", "789.green", "purple.102", "orange.abc")
foreach($Item in $SpelledOutArray)
{
$item | where {$wildcardarray -contains $item}
}
结果我得到了 BLUE!.txt,因为它是我的控件,没有通配符。如果我将其更改为 -notcontains,我将返回除 BLUE 之外的所有结果。我试过包含、匹配、等于、喜欢以及它们的所有对立面、比较对象,但没有任何效果。我没有收到任何错误,只是没有得到预期的结果
我尝试用 [a-zA-Z] 和其他组合替换“*”,但它是按字面意思替换它,而不是作为通配符。我不确定我做错了什么...... PSVersion 5.1 Win 10
有人知道为什么喜欢/匹配/包含不起作用的逻辑,我可以做些什么让它起作用?它不必漂亮,它只需要工作
【问题讨论】:
-
-contains寻找完全匹配,我很确定它威胁*作为一个没有任何特殊含义的字符 -
$WildCardArray | ForEach-Object {$Wildcard = $_ ; $SpelledOutArray | Where-Object {$_ -like $WildCard}} -
@beatcracker 输出错误。
标签: arrays regex powershell wildcard