如何用PowerShell批量修改文件名中的序号格式?
PowerShell批量重命名文件序号优化方案
需求场景
需要将一批文件名的序号格式批量修改,示例如下:
01. name1.txt→1.01 name1.txt02. name2.txt→1.02 name2.txt100. name100.txt→1.100 name100.txt101. name101.txt→1.101 name101.txt
核心需求
- 将文件名开头的
XX.格式序号替换为1.XX - 完全保留文件名除开头序号外的其余部分
- 保持文件原有的排序顺序不变
当前分步操作的问题
目前需要分两次命令执行,还得针对两位数、三位数序号分别处理,效率较低:
- 移除文件名开头部分(需分两次适配不同位数):
gci *.txt | ren -newname { [string]($_.name).substring(4) }
- 重新添加带前缀的序号:
$count=01; gci | rename-item -newname {"1.{0:d2} {1}" -f $script:count++, $_.name}
最优单命令解决方案
用正则表达式匹配替换,一次完成所有文件的重命名,无需区分序号位数,同时保留原序号和文件顺序:
Get-ChildItem *.txt | Rename-Item -NewName { $_.Name -replace '^(\d+)\.', '1.$1 ' } -WhatIf
命令说明
^(\d+)\.:正则表达式匹配文件名开头的任意位数数字加句点,(\d+)会把原序号捕获为分组'1.$1 ':替换为1.加捕获到的原序号,再用空格代替原来的句点-WhatIf:参数用于预览重命名效果,确认无误后可以删除该参数执行实际重命名
这个方法的优势:
- 单条命令完成所有操作,无需分步处理
- 自动适配1位、2位、3位甚至更多位数的序号
- 完全保留原序号,不会因为重新计数打乱原有顺序
Get-ChildItem默认按文件名排序,确保处理顺序和原文件顺序一致
内容的提问来源于stack exchange,提问作者tri-t0ne
相关产品推荐
相关产品推荐

