如何用批处理筛选指定目录无下划线的jpg/png文件并按规则重命名
优化后批处理脚本
@echo off setlocal enabledelayedexpansion :: 此处替换为实际的CLI根目录路径 set "CLI_ROOT=\\servername\SECH\DATA\CLI\" :: 遍历CLI根目录下所有jpg、png文件,仅需处理jpg可删除*.png参数 For /R "%CLI_ROOT%" %%a in (*.jpg *.png) DO ( echo 扫描到文件: %%~nxa :: 获取文件所在父文件夹名称 For %%g in ("%%~dpa.") do set "LAST_FOLDER=%%~nxg" :: 仅处理IN文件夹内的文件 If "!LAST_FOLDER!" == "IN" ( :: 获取IN上层的代理编号文件夹名 For %%V in ("%%~dpa..") do set "FOLDER_NAME=%%~nxV" set "CURRENT_FILE_NAME=%%~nxa" set "PREFIX=!FOLDER_NAME!_" :: 核心过滤:仅处理文件名不含下划线的文件 If "!CURRENT_FILE_NAME:_=!" == "!CURRENT_FILE_NAME!" ( echo 待处理文件: !CURRENT_FILE_NAME!,代理前缀: !PREFIX! Rename "%%~a" "!PREFIX!%%~nxa" echo 重命名完成: !PREFIX!%%~nxa ) ) ) endlocal pause
核心优化点
- 新增无下划线文件名过滤逻辑:通过变量替换把文件名中的下划线替换为空,若替换结果与原文件名完全一致,说明原文件不含下划线,仅对这类文件执行后续操作,完全匹配需求。
- 简化冗余判断逻辑:因为我们仅处理无下划线的文件,天然不可能已经添加过「编号_」格式的前缀,无需额外判断是否重复重命名,也解决了原脚本硬编码取前4位对比前缀、适配不了不同长度代理编号的问题。
- 保留
for /R指定遍历路径的逻辑,只需修改CLI_ROOT变量即可快速调整扫描目录,不需要修改循环逻辑。
注意事项
运行脚本前建议先把Rename "%%~a" "!PREFIX!%%~nxa"行替换为echo 测试重命名: "%%~a" "!PREFIX!%%~nxa",确认输出的重命名规则符合预期后再执行实际重命名操作,避免误改文件。
内容的提问来源于stack exchange,提问作者Chetranjanee
相关产品推荐
相关产品推荐

