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

如何在PowerShell中批量重命名文件并为前缀数字补零填充

解决方案

你之前尝试补零报错的核心原因是:-replace 运算符的默认替换参数是纯字符串模板,不能直接执行PowerShell表达式,你写的{0:D2}、.PadLeft会被当成普通文件名的一部分,生成包含大括号等非法字符的文件名,所以触发系统报错。

兼容所有PowerShell版本的实现

这是最稳妥的写法,还自带过滤逻辑,不会误改不匹配规则的文件:

# 先加-WhatIf预览重命名结果,确认无误后删除-WhatIf再执行
Get-ChildItem -Path *.mp3 | Rename-Item -NewName {
    if ($_.Name -match '^ABCDEF_S3L(\d{1,2})_\d{6}_GHIJK\.mp3$') {
        $lessonNumber = [int]$matches[1]
        return "{0:D2}-lesson.mp3" -f $lessonNumber
    }
    # 不匹配规则的文件保持原名
    $_.Name
} -WhatIf

逻辑说明:

  • 先用-match正则匹配提取L后面的数字,存储到自动变量$matches[1]
  • 将提取到的字符串数字转为整型,再用格式化运算符-f转为两位固定长度的字符串,1~9会自动补前导零
  • 不匹配命名规则的文件不会被修改,避免误操作

PowerShell 7+ 简化写法

PowerShell 7及以上版本支持-replace的回调函数写法,可以直接在替换逻辑里做格式化:

# 同样先加-WhatIf预览
Get-ChildItem -Path *.mp3 | Rename-Item -NewName {
    $_.Name -replace '^ABCDEF_S3L(\d{1,2})_\d{6}_GHIJK\.mp3$', {
        "{0:D2}-lesson.mp3" -f [int]$_.Groups[1].Value
    }
} -WhatIf

注意事项

  • 所有操作务必先加-WhatIf参数预览重命名结果,确认输出的新文件名符合预期后再删除-WhatIf实际执行
  • 如果目录内还有其他非目标MP3文件,建议先将目标文件单独转移到空文件夹后再执行操作

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 03:54:03