PowerShell如何仅对首个“-”分隔符后数字补零批量重命名文件
PowerShell 仅修改第一个短横线后数字补零的批量重命名方案
可直接使用的代码
Get-ChildItem "C:\Path\Folder-with-Files" -File | Rename-Item -NewName { [regex]::Replace($_.BaseName, '^([^-]+)-(\d+)', { $groups = $args[0].Groups return '{0}-{1:D3}' -f $groups[1].Value, [int]$groups[2].Value }) + $_.Extension }
代码说明
- 原代码的问题:使用
\-匹配所有短横线,没有限定仅匹配第一个短横线后的数字,同时PadRight是右侧补字符,不符合左补前导零的需求。 - 新正则
^([^-]+)-(\d+)仅匹配从文件名开头到第一个短横线后的连续数字段,不会影响后续的短横线内容:^锚定文件名开头([^-]+)捕获第一个短横线之前的所有内容-匹配第一个出现的短横线(\d+)捕获第一个短横线后的连续数字
- 替换时使用
D3整数格式化符,自动给数字左补前导零到3位,逻辑更严谨,即使原始数字超过3位也会保留完整数值。
预览修改效果
如果需要先确认修改结果再执行,可以加上-WhatIf参数,不会实际修改文件:
Get-ChildItem "C:\Path\Folder-with-Files" -File | Rename-Item -NewName { [regex]::Replace($_.BaseName, '^([^-]+)-(\d+)', { $groups = $args[0].Groups return '{0}-{1:D3}' -f $groups[1].Value, [int]$groups[2].Value }) + $_.Extension } -WhatIf
内容的提问来源于stack exchange,提问作者LBro
相关产品推荐
相关产品推荐

