You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell字符串数组通配符匹配:筛选排除指定前缀的回收站路径

PowerShell 过滤回收站路径解决方案

这里有两种实用的方法来实现你的需求,从指定的回收站路径数组中排除掉匹配给定前缀通配符的条目,不管排除列表有多少项都能适用:

方法1:使用正则表达式匹配前缀

这个方法适合排除项较多的场景,性能更高效:

$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:\')

# 把排除前缀转换为正则匹配模式,确保只匹配字符串开头
$excludeRegex = '^(' + ($ExcludeRecycleBinsPathWildCards | ForEach-Object { [regex]::Escape($_) }) -join '|' + ')'

# 筛选出不匹配前缀的路径
$filteredPaths = $RecycleBinPaths | Where-Object { $_ -notmatch $excludeRegex }

# 输出结果
$filteredPaths

解释

  • [regex]::Escape($_):处理路径中的特殊字符(比如反斜杠\),避免破坏正则表达式结构
  • 拼接后的正则模式类似^(C:\\|F:\\),表示匹配以C:\或F:\开头的字符串
  • -notmatch会保留所有不符合该模式的路径,正好符合你的需求

方法2:使用原生通配符-like(更易读)

如果你更喜欢直观的写法,用PowerShell自带的通配符匹配就足够了:

$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:\')

# 遍历每个路径,检查是否不匹配任何排除前缀
$filteredPaths = $RecycleBinPaths | Where-Object {
    $currentPath = $_
    # 如果没有任何排除前缀匹配当前路径,就保留它
    -not ($ExcludeRecycleBinsPathWildCards | Where-Object { $currentPath -like "$_*" })
}

# 输出结果
$filteredPaths

解释

  • "$_*":把每个排除前缀变成通配符模式,表示“以此前缀开头的任意字符串”
  • -not (...):只有当当前路径不匹配所有排除项时,才会被保留下来

两种方法运行后都会输出你期望的结果:

D:$RECYCLE.BIN E:$RECYCLE.BIN L:$RECYCLE.BIN M:$RECYCLE.BIN S:$RECYCLE.BIN T:$RECYCLE.BIN

内容的提问来源于stack exchange,提问作者Steve

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 14:43:13