编写Bat脚本批量删除PDF文件名中任意三位大写代码后的内容
批量重命名PDF文件的Bat脚本优化方案
针对你遇到的批量重命名需求,以下是适配任意三位大写代码、避免误删问题的Bat脚本:
@echo off setlocal enabledelayedexpansion :: 遍历当前目录下所有PDF文件 for %%f in (*.pdf) do ( set "filename=%%~nf" set "extension=%%~xf" set "newName=" set "found=0" :: 从后往前查找最后一个"-"的位置,定位三位大写代码 for /l %%i in (0,1,50) do ( if !found! equ 0 ( set "char=!filename:~-%%i,1!" if "!char!"=="-" ( :: 提取"-"后面的三位字符,判断是否为大写字母 set "code=!filename:~-%%i+1,3!" echo !code! | findstr /r "^[A-Z][A-Z][A-Z]$" >nul if !errorlevel! equ 0 ( :: 截取到三位代码结尾的部分作为新文件名 set "newName=!filename:~0,-%%i+4!" set "found=1" ) ) ) ) :: 如果找到符合条件的代码,执行重命名 if defined newName ( if not "!newName!!extension!"=="%%f" ( :: 先打印预览,确认无误后替换成 ren echo ren "%%f" "!newName!!extension!" :: ren "%%f" "!newName!!extension!" ) ) ) endlocal pause
脚本说明
- 启用
delayedexpansion实现循环内的变量动态更新 - 从文件名末尾向前遍历,精准定位最后一个「-」,避免前面内容中的「-」干扰
- 通过
findstr正则匹配验证「-」后是否为三位大写字母,确保只处理符合格式的文件 - 默认只打印重命名命令(
echo ren),确认预览结果无误后,再注释掉echo执行实际重命名
注意事项
- 先将脚本放在PDF文件所在文件夹执行预览,确认新文件名符合要求
- 如果文件名长度超过50字符,可调整
for /l循环的上限(把50改成更大的数值) - 若存在重名文件,脚本会自动跳过(避免覆盖)
内容的提问来源于stack exchange,提问作者Garze
相关产品推荐
相关产品推荐

