批量脚本实现文件夹内早于当前日期的图片重命名需求
批量重命名早于当前日期的图片文件(Batch脚本解决方案)
我来帮你完善这个Batch脚本,实现对文件夹内所有早于当前日期的图片按指定格式重命名。先看完整的脚本,再一步步解释细节:
@echo off setlocal enabledelayedexpansion :: 设置摄像头映射:DRS01 -> Cam 1,可根据需要添加更多摄像头的对应关系 set "cam_map=DRS01:Cam 1;DRS02:Cam 2" :: 获取当前日期并转换为YYYYMMDD标准格式(适配不同系统的日期显示差异) for /f "tokens=2 delims==" %%a in ('wmic os get localdatetime /value') do set "dt=%%a" set "current_date=!dt:~0,8!" :: 遍历所有符合原命名格式的图片文件(同时处理小写和大写扩展名) for %%F in (DRS*_*_*_*.jpg DRS*_*_*_*.JPG) do ( :: 拆分原文件名的核心部分:提取摄像头前缀和时间戳(下划线分隔) for /f "tokens=1,3 delims=_" %%i in ("%%~nF") do ( set "cam_prefix=%%i" set "timestamp=%%j" :: 从时间戳中提取文件的日期部分(前8位) set "file_date=!timestamp:~0,8!" :: 判断文件日期是否早于当前日期 if !file_date! lss !current_date! ( :: 根据摄像头前缀匹配目标命名前缀 set "target_prefix=" for /f "tokens=1,2 delims=:;" %%x in ("!cam_map!") do ( if "%%x" equ "!cam_prefix!" set "target_prefix=%%y" ) :: 确认匹配到前缀后执行重命名 if not "!target_prefix!"=="" ( ren "%%F" "!target_prefix!_!timestamp!.jpg" echo 已完成重命名:"%%F" -> "!target_prefix!_!timestamp!.jpg" ) ) ) ) endlocal pause
关键细节说明:
- 摄像头前缀映射:通过
cam_map变量可以灵活添加更多摄像头的对应规则,比如后续遇到DRS03只需改成DRS01:Cam 1;DRS02:Cam 2;DRS03:Cam 3即可,不用修改核心逻辑。 - 日期兼容性处理:用
wmic命令获取系统标准时间格式,避免了不同Windows系统日期显示格式(如MM/DD/YYYY或DD/MM/YYYY)的冲突,确保日期比较准确。 - 高效文件名拆分:直接提取原文件名中第1段(摄像头标识)和第3段(时间戳),跳过中间无关的冗余字段,简化处理逻辑。
- 安全校验:先通过字符串比较确认文件日期早于当前日期,再执行重命名;同时添加了映射前缀的校验,避免无意义的重命名操作。
使用小提示:
- 第一次测试时可以把
ren命令改成echo ren,先预览所有重命名操作,确认结果符合预期后再正式执行。 - 如果需要支持更多图片格式(如
.jpeg),只需在遍历文件的列表中添加DRS*_*_*_*.jpeg即可。
内容的提问来源于stack exchange,提问作者preethi
相关产品推荐
相关产品推荐

