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

PowerShell文件重命名正则表达式失效问题求助

问题分析与解决

原脚本的问题

  1. 正则语法错误:原表达式里的(\d\d})多了多余的闭合大括号},导致日期匹配失败;同时未转义.,正则中.代表任意字符,匹配pdf前的点必须写成\.。
  2. 未覆盖文件名前缀:原文件名开头的specificLeaderString 没被正则匹配到,替换规则无法作用于整个文件名。
  3. 格式不符合需求:原脚本生成带方括号的文件名,和你要的yyyyMMdd newSfx.pdf格式不符。

正确的重命名脚本

简洁版(直接正则替换)

Get-ChildItem -Filter "*.pdf" | Rename-Item -NewName { $_.Name -replace '^.*(\d{4})-(\d{2})-(\d{2})\.pdf$', '$1$2$3 SmithChq.pdf' }

说明:

  • Get-ChildItem -Filter "*.pdf":只处理PDF文件,避免误操作其他类型文件。
  • 正则^.*(\d{4})-(\d{2})-(\d{2})\.pdf$:
    • ^.* 匹配文件名开头的任意前缀(比如specificLeaderString )
    • (\d{4})-(\d{2})-(\d{2}) 捕获4位年份、2位月份、2位日期
    • \.pdf$ 匹配文件名结尾的.pdf(转义.避免匹配任意字符)
  • 替换字符串$1$2$3 SmithChq.pdf:把捕获的年月日拼接成无连字符格式,加上指定后缀。

稳妥版(增加格式校验)

如果怕有不符合格式的文件,可先校验再重命名:

Get-ChildItem -Filter "*.pdf" | ForEach-Object {
    # 匹配带日期的文件名前缀
    if ($_.BaseName -match '^.*(\d{4})-(\d{2})-(\d{2})$') {
        # 拼接无连字符的日期字符串
        $dateString = "$($matches[1])$($matches[2])$($matches[3])"
        # 生成新文件名
        $newFileName = "$dateString SmithChq.pdf"
        # 执行重命名
        $_ | Rename-Item -NewName $newFileName
    }
}

内容的提问来源于stack exchange,提问作者G.G G99

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 12:47:13