编写Windows批处理脚本:将文件名中ddmmyyyy日期转为yyyymmdd
Windows批处理实现文件名内ddmmyyyy日期转yyyymmdd格式批量重命名
需求说明
编写Windows批处理(.bat)文件,批量重命名文件夹内文件,将文件名中ddmmyyyy格式的日期戳转换为yyyymmdd格式。
示例原文件名
AccountStatement_10062023.pdf AccountStatement_10072023.pdf AccountStatement_10082023.pdf AccountStatement_10092023.pdf AccountStatement_10102023.pdf
期望重命名后文件名
AccountStatement_20230610.pdf AccountStatement_20230710.pdf AccountStatement_20230810.pdf AccountStatement_20230910.pdf AccountStatement_20231010.pdf
解决方案脚本
以下是符合需求的批处理脚本:
@echo off setlocal enabledelayedexpansion :: 遍历当前目录下所有文件,如需限定类型可改为 *.pdf 等通配符 for %%f in (*) do ( set "filename=%%~nf" set "extension=%%~xf" :: 匹配文件名中"_后接8位数字"的格式(对应ddmmyyyy日期) echo !filename! | findstr /r "_[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]" >nul if not errorlevel 1 ( :: 拆分文件名前缀和日期部分 for /f "tokens=1,2 delims=_" %%a in ("!filename!") do ( set "prefix=%%a" set "date_str=%%b" :: 提取dd、mm、yyyy各部分 set "dd=!date_str:~0,2!" set "mm=!date_str:~2,2!" set "yyyy=!date_str:~4,4!" :: 组合为yyyymmdd格式的新日期 set "new_date=!yyyy!!mm!!dd!" :: 生成新文件名并执行重命名 set "new_filename=!prefix!_!new_date!!extension!" rename "%%f" "!new_filename!" echo 已完成重命名: %%f → !new_filename! ) ) ) endlocal pause
脚本关键说明
- 延迟变量扩展:
setlocal enabledelayedexpansion确保循环内变量能实时更新,避免变量值不刷新的问题 - 格式匹配:
findstr正则匹配确保只处理包含_+8位数字的目标文件,避免误操作 - 字符串截取:通过
!date_str:~起始位置,长度!的语法,从8位日期串中拆分出日、月、年部分 - 灵活适配:若只需处理特定类型文件,可将
for %%f in (*)改为for %%f in (*.pdf)等格式
注意事项
- 测试阶段可将
rename改为echo rename,先预览重命名结果再实际执行 - 确保目标文件名格式统一,日期部分为下划线后紧跟8位
ddmmyyyy格式数字 - 脚本需放在目标文件所在目录运行,或修改遍历路径为指定文件夹
内容的提问来源于stack exchange,提问作者davehants
相关产品推荐
相关产品推荐

