PowerShell批量重命名:文件名中间插入递增序号的脚本修正方法
PowerShell批量重命名HTML文件修正方案
问题说明
现有脚本存在三个核心问题:
- 拼接新文件名时,取完首段前缀后没有追加重复的首段前缀值,导致输出文件名缺失要求的重复前缀字段
- 重复调用
split分割文件名、硬编码拼接分割后的分段,遇到文件名中下划线数量变动时容易出现拼接错误,执行效率低 - 默认仅处理当前目录下的html文件,未覆盖多子目录处理场景
相关文件名规则如下:
- 原文件名示例:
8675309_FileName1_ExtraSuff1_Extrastuff2 and some more stuff_012345.html 2020202_FileName2_ExtraSuff1_Extrastuff2 and some more stuff_012345.html
- 目标文件名规则:原首段前缀 + 下划线 + 重复首段前缀 + 下划线 + 5位补零递增序号 + 下划线 + 年份 + 下划线 + 原文件名除首段外的剩余部分 + 文件后缀
- 目标效果示例:
8675309_8675309_00001_2022_FileName1_ExtraSuff1_Extrastuff2 and some more stuff_012345.html 2020202_2020202_00002_2022_FileName2_ExtraSuff1_Extrastuff2 and some more stuff_012345.html
修正后脚本
$i = 1 # 如需递归处理所有子目录下的html文件,在Get-ChildItem后追加 -Recurse 参数 Get-ChildItem -Filter *.html | ForEach-Object{ # 仅做一次分割,将文件名拆为首段前缀和剩余内容两部分,避免重复分割 $nameSegments = $_.BaseName -split '_', 2 $firstPrefix = $nameSegments[0] $remainContent = $nameSegments[1] # 按规则拼接新文件名,如需保留原脚本中的_Performance_Eval_字段,可将下方_2022_替换为_2022_Performance_Eval_ $newFileName = "{0}_{1}_{2}_2022_{3}{4}" -f $firstPrefix, $firstPrefix, ('{0:D5}' -f $i), $remainContent, $_.Extension Rename-Item -Path $_.FullName -NewName $newFileName $i++ }
关键修改点
- 提前存储首段前缀变量,拼接时按规则追加一次重复前缀,补全缺失字段
- 用
-split '_',2将文件名仅拆分为2段,剩余内容直接保留原结构拼接,不需要逐段硬编码,兼容任意数量下划线的文件名 - 减少重复split操作,提升脚本执行效率
- 支持按需添加
-Recurse参数实现多目录递归处理
内容的提问来源于stack exchange,提问作者Shaun Badertscher
相关产品推荐
相关产品推荐

