基于导入CSV批量替换PDF文件名中的旧编号为新编号
批量替换PDF文件名中的指定编号(基于CSV规则)
以下是适配你需求修改后的PowerShell脚本,可从CSV读取编号替换规则,精准修改文件名中的编号部分,不改动其他内容:
# 配置路径:替换为你的PDF文件夹和CSV规则文件实际路径 $targetPath = "C:\Your\PDF\Directory" $csvPath = "C:\Path\To\RenameRules.csv" # 将CSV规则转换为哈希表,提升匹配效率 $renameMap = @{} Import-Csv $csvPath | ForEach-Object { $renameMap[$_.oldname] = $_.newname } # 遍历目标文件夹内的PDF文件,执行编号替换 Get-ChildItem -Path $targetPath -Filter "*.pdf" | ForEach-Object { $newFileName = $_.Name # 检查当前文件名是否包含需替换的旧编号 foreach ($oldId in $renameMap.Keys) { if ($newFileName -match [regex]::Escape($oldId)) { # 替换旧编号为新编号 $newFileName = $newFileName -replace [regex]::Escape($oldId), $renameMap[$oldId] break # 每个文件仅匹配一个编号,找到后停止遍历规则 } } # 若文件名有变化则执行重命名(-WhatIf用于测试,确认无误后可移除) if ($newFileName -ne $_.Name) { Rename-Item -Path $_.FullName -NewName $newFileName -WhatIf } }
关键细节说明:
- 哈希表映射:把CSV中的旧编号与新编号对应存储,比反复遍历CSV更高效,适合批量处理场景。
- 正则转义:用
[regex]::Escape()处理旧编号,避免编号中含有的特殊字符(如.、*)被当作正则语法解析,确保精确匹配原编号字符串。 - 测试模式:脚本中的
-WhatIf参数仅输出将要执行的重命名操作,不会实际修改文件名。确认替换逻辑正确后,移除该参数即可执行实际修改。 - 终止匹配:
break语句确保每个文件只匹配一个编号(符合你的场景需求),避免同一文件被多次替换。
使用步骤:
- 准备CSV规则文件,列名必须为
oldname和newname,格式与你提供的示例一致。 - 修改脚本中的
$targetPath和$csvPath为实际路径。 - 先运行带
-WhatIf的脚本,检查输出的重命名计划是否正确。 - 确认无误后,移除
-WhatIf参数,执行脚本完成批量替换。
内容的提问来源于stack exchange,提问作者memphreblues
相关产品推荐
相关产品推荐

