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

PowerShell正则匹配MM-YYYY格式文件夹匹配不全问题求助

问题根因

匹配异常由正则分支逻辑与匹配对象属性不匹配导致:

  1. 匹配目标$_.Name为文件夹纯名称(如08-2021),不含路径分隔符反斜杠。
  2. 现有正则((\\0[1-9]|1[0-2])-(200[0-9]|20[1-4][0-9]|205[0-5]))的分支逻辑拆分错误:
    • 第一分支\\0[1-9]要求01~09的月份必须带反斜杠前缀才能命中
    • 第二分支1[0-2]允许10~12的月份无需前缀即可命中
      因此10、11、12开头的合法文件夹可正常匹配,01~09开头的合法文件夹因名称无反斜杠前缀被误过滤。原有反斜杠逻辑无法实现排除DD-MM-YYYY格式文件夹的需求,因为$_.Name属性中不存在反斜杠。
修复方案

方案1(推荐):锚定文件夹名完整格式

直接要求整个文件夹名完全符合MM-YYYY规则,从根源排除带多余前缀的日期格式文件夹:

$monthlist = Get-ChildItem $place -Recurse -Directory -Force `
| Where-Object { $_.Name -match '^(0[1-9]|1[0-2])-(200[0-9]|20[1-4][0-9]|205[0-5])$' }

^和$分别匹配字符串首尾,要求文件夹名无多余字符,自动过滤01-01-2021这类格式不符的文件夹。

方案2:保留反斜杠逻辑,切换匹配对象

如果需要保留反斜杠匹配逻辑,可将匹配目标改为文件夹完整路径$_.FullName:

$monthlist = Get-ChildItem $place -Recurse -Directory -Force `
| Where-Object { $_.FullName -match '\\(0[1-9]|1[0-2])-(200[0-9]|20[1-4][0-9]|205[0-5])$' }

\\匹配完整路径的最后一个反斜杠分隔符,结尾$保证反斜杠后为完整的MM-YYYY格式文件夹名,同样可排除DD-MM-YYYY格式的文件夹。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 03:06:03