PowerShell正则匹配MM-YYYY格式文件夹匹配不全问题求助
问题根因
匹配异常由正则分支逻辑与匹配对象属性不匹配导致:
- 匹配目标
$_.Name为文件夹纯名称(如08-2021),不含路径分隔符反斜杠。 - 现有正则
((\\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
相关产品推荐
相关产品推荐

