如何使用PowerShell对Example系列PDF文件批量补零重命名
PowerShell 批量补全PDF文件名编号解决方案
最优实现代码
仅需一行命令即可完成需求,自动匹配Example*.pdf规则的文件,将文件名中的1~2位数字补前导零到3位,已为3位的编号保持不变:
Get-ChildItem -Filter "Example*.pdf" | Rename-Item -NewName { $_.Name -replace '(_)(\d{1,2})(\.pdf)$', { $_.Groups[1].Value + $_.Groups[2].Value.PadLeft(3,'0') + $_.Groups[3].Value } } -WhatIf
说明:执行时先保留-WhatIf参数,控制台会输出所有待修改的文件名预览,确认结果符合预期后,删除-WhatIf参数即可实际执行重命名操作。
原有代码问题说明
- 第一段拆分逻辑的报错原因:
- 循环中使用了未定义的
$Path变量,Rename-Item无法读取目标文件路径 - 直接对
$_(FileInfo对象)执行Split操作,需调用$_.Name属性获取文件名字符串后再拆分
- 第二段正则代码无效果的原因:
- 过滤规则
ex*和实际要匹配的Example*规则不一致 - 替换时直接操作
$_对象而非$_.Name字符串属性 - 正则规则未匹配文件名中的下划线分隔符,匹配逻辑不生效
修正后的拆分逻辑实现
如果要沿用你原本的拆分思路,修正后的代码如下:
Get-ChildItem -Filter "Example*.pdf" | ForEach-Object { $baseName = $_.BaseName $num = $baseName.Split('_')[1].PadLeft(3,'0') Rename-Item -Path $_.FullName -NewName "Example_$num.pdf" }
内容的提问来源于stack exchange,提问作者J Web
相关产品推荐
相关产品推荐

