如何解决PowerShell 字符串数组模式匹配
我有以下 2 个字符串数组。我希望能够做的是返回仅那些来自 $RecycleBinPaths 的条目,这些条目不以 所有 来自 的条目开头$ExcludeRecycleBinsPathWildCards(即通配符模式匹配)
$RecycleBinPaths = @('C:\$Recycle.Bin','D:\$RECYCLE.BIN','E:\$RECYCLE.BIN','F:\$RECYCLE.BIN','L:\$RECYCLE.BIN','M:\$RECYCLE.BIN','S:\$RECYCLE.BIN','T:\$RECYCLE.BIN')
$ExcludeRecycleBinsPathWildCards = @('C:\','F:\')
在上面的例子中,我希望输出是:
D:\$RECYCLE.BIN
E:\$RECYCLE.BIN
L:\$RECYCLE.BIN
M:\$RECYCLE.BIN
S:\$RECYCLE.BIN
T:\$RECYCLE.BIN
事实上,上面的 $ExcludeRecycleBinsPathWildCards 数组可以包含任意数量的条目,不一定只有上面显示的 2 个。
你能帮忙吗?谢谢。
解决方法
使用嵌套的 .Where()
方法:
$RecycleBinPaths.Where({
# Save path to separate variable
$path = $_
# Now test if _any_ string in the list of wildcards match,and then apply -not - making it resolve to true only if _none_ of the wildcards match the path
-not $ExcludeRecycleBinsPathWildCards.Where({ $path -like "$_*" },'First')
})
,
另一种遍历项目并添加到另一个数组的方法。
$RecycleBinPaths = @('C:\$Recycle.Bin','D:\$RECYCLE.BIN','E:\$RECYCLE.BIN','F:\$RECYCLE.BIN','L:\$RECYCLE.BIN','M:\$RECYCLE.BIN','S:\$RECYCLE.BIN','T:\$RECYCLE.BIN')
$ExcludeRecycleBinsPathWildCards = @('C:\','F:\')
$SelectedRecycleBinPaths = @()
foreach($rbp in $RecycleBinPaths)
{
if(-Not ($ExcludeRecycleBinsPathWildCards -contains $rbp.ToString().Substring(0,3)))
{
$SelectedRecycleBinPaths += $rbp
}
}
$SelectedRecycleBinPaths
D:\$RECYCLE.BIN
E:\$RECYCLE.BIN
L:\$RECYCLE.BIN
M:\$RECYCLE.BIN
S:\$RECYCLE.BIN
T:\$RECYCLE.BIN
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。