Windows 批处理脚本 5 种高级重命名模式:正则替换、日期前缀、序号填充
📅 2026/7/8 22:24:34
👁️ 阅读次数
📝 编程学习
Windows 批处理脚本 5 种高级重命名模式:正则替换、日期前缀、序号填充
在文件管理工作中,批量重命名是一项常见但繁琐的任务。对于需要处理成百上千个文件的开发者或运维人员来说,手动操作不仅效率低下,还容易出错。本文将介绍五种基于 Windows 批处理脚本的高级重命名技术,帮助您实现自动化、精准化的文件管理。
1. 正则表达式替换模式
正则表达式是处理复杂文本模式的利器,在批处理文件中同样可以发挥强大作用。以下脚本实现了基于正则的文件名替换:
@echo off setlocal enabledelayedexpansion :: 设置替换规则(旧模式→新模式) set "pattern=IMG_\d{4}" set "replacement=Photo_2023" for /f "delims=" %%f in ('dir /b /a-d ^| findstr /r "%pattern%"') do ( set "filename=%%~nf" set "ext=%%~xf" set "new_name=!filename:%pattern%=%replacement%!" ren "%%f" "!new_name!!ext!" )提示:此脚本会查找所有匹配
IMG_数字格式的文件,并将其替换为Photo_2023前缀。可根据实际需求修改pattern和replacement变量。
关键参数说明:
| 参数 | 说明 | 示例值 |
|---|---|---|
| pattern | 需要匹配的正则模式 | IMG_\d{4} |
| replacement | 替换后的文本 | Photo_2023 |
| /r | 启用正则匹配 | - |
2. 日期时间前缀模式
为文件添加系统日期时间戳是归档管理的常见需求。以下脚本实现自动添加精确到秒的时间戳:
@echo off setlocal enabledelayedexpansion for /f "tokens=1-6 delims=/ " %%a in ('date /t') do ( set year=%%c set month=%%a set day=%%b ) for /f "tokens=1-3 delims=:." %%g in ('time /t') do ( set hour=%%g set minute=%%h set second=%%i ) set "timestamp=%year%%month%%day%_%hour%%minute%%second%" for %%f in (*.*) do ( if not "%%~xf"==".bat" ( ren "%%f" "%timestamp%_%%~nxf" ) )该脚本会生成如20230615_143022_filename.txt格式的新文件名。通过修改时间格式字符串,可以灵活调整时间戳的显示方式。
3. 自动序号填充模式
为文件添加整齐的序号是整理系列文件的理想方案。以下脚本实现三位数自动编号:
@echo off setlocal enabledelayedexpansion set count=1000 for /f "delims=" %%f in ('dir /b /a-d /on') do ( set /a count+=1 set "serial=!count:~1!" ren "%%f" "Document_!serial!%%~xf" )编号效果对比:
| 原文件名 | 新文件名 |
|---|---|
| data1.txt | Document_001.txt |
| report.pdf | Document_002.pdf |
| image.png | Document_003.png |
注意:
!count:~1!表示从变量值的第二个字符开始截取,实现去掉千位数的效果。
4. 大小写转换模式
统一文件名大小写格式可提升文件系统的整洁度。以下脚本提供三种转换方案:
@echo off setlocal enabledelayedexpansion :: 选择转换模式:1-全大写 2-全小写 3-首字母大写 set mode=3 for %%f in (*.*) do ( set "name=%%~nf" set "ext=%%~xf" if !mode!==1 ( set "new=!name!!ext!" for %%i in ("A" "B" "C" "D" "E" "F" "G" "H" "I" "J" "K" "L" "M" "N" "O" "P" "Q" "R" "S" "T" "U" "V" "W" "X" "Y" "Z") do ( set "new=!new:%%i=%%i!" } ) else if !mode!==2 ( set "new=!name!!ext!" for %%i in ("a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l" "m" "n" "o" "p" "q" "r" "s" "t" "u" "v" "w" "x" "y" "z") do ( set "new=!new:%%i=%%i!" } ) else ( set "first=!name:~0,1!" set "rest=!name:~1!" for %%i in ("A" "B" "C" "D" "E" "F" "G" "H" "I" "J" "K" "L" "M" "N" "O" "P" "Q" "R" "S" "T" "U" "V" "W" "X" "Y" "Z") do ( set "first=!first:%%i=%%i!" } set "new=!first!!rest!!ext!" } ren "%%f" "!new!" )5. 关键信息提取模式
从复杂文件名中提取特定部分有时非常必要。以下脚本演示如何提取文件名中的日期部分:
@echo off setlocal enabledelayedexpansion for %%f in (*.*) do ( set "name=%%~nf" set "ext=%%~xf" :: 提取YYYY-MM-DD格式日期 for /f "tokens=1-3 delims=-" %%a in ("!name!") do ( set "year=%%a" set "month=%%b" set "day=%%c" ) if defined year ( set "new_name=!year!!month!!day!!ext!" ren "%%f" "!new_name!" ) )实际项目中,我曾用类似脚本处理数千个日志文件,成功将如server_log_2023-06-15_error.txt的文件统一重命名为20230615.txt格式,极大简化了后续分析工作。
编程学习
技术分享
实战经验