求可批量重命名子目录文件的Windows批处理脚本
Windows批量重命名子目录文件脚本
以下是满足你需求的批处理脚本,能自动处理所有子目录下的文件,按要求完成重命名:
@echo off setlocal enabledelayedexpansion :: 遍历所有子目录下的文件(不含目录) for /r %%f in (*) do ( :: 分离文件名和扩展名 set "filename=%%~nf" set "ext=%%~xf" :: 把文件名里的所有点替换为空格 set "processed=!filename:.= !" :: 查找第一个4位数字(年份)的位置并处理 set "new_name=" set "found_year=" for /l %%i in (0,1,30) do ( if "!found_year!"=="" ( :: 截取当前位置开始的4个字符,判断是否为4位数字 set "temp=!processed:~%%i,4!" echo !temp!|findstr /r "^[0-9][0-9][0-9][0-9]$">nul if not errorlevel 1 ( :: 提取年份前的内容,加上(年份) set "prefix=!processed:~0,%%i!" set "year=!temp!" set "new_name=!prefix!(!year!)" set "found_year=1" ) ) ) :: 如果找到有效年份则执行重命名 if not "!new_name!"=="" ( set "full_new_name=!new_name!!ext!" :: 避免文件名重复或不必要的重命名 if not "!full_new_name!"=="%%~nxf" ( ren "%%f" "!full_new_name!" echo 已重命名:"%%~nxf" -> "!full_new_name!" ) ) else ( echo 未找到有效年份,跳过:"%%~nxf" ) ) endlocal pause
脚本说明
- 替换点为空格:通过
set "processed=!filename:.= !"将文件名中的所有点替换成空格,扩展名的点会被单独保留。 - 识别并处理年份:通过循环截取字符串,用
findstr匹配4位数字,找到第一个年份后,截取其前面的内容并将年份用括号包裹。 - 遍历子目录:使用
for /r递归遍历所有子目录下的文件,无需手动逐个目录处理。
使用方法
- 将上述代码保存为
rename_files.bat。 - 把该批处理文件放到需要处理的根目录下。
- 双击运行即可,脚本会自动处理所有子目录文件,并输出重命名日志。
你之前尝试代码的问题
- 第一个脚本仅用点分割文件名,无法识别年份,也不能处理子目录。
- 第二个脚本是固定匹配特定文件名格式的替换,不具备通用性,无法处理你提供的示例文件名结构。
内容的提问来源于stack exchange,提问作者Sam Amato
相关产品推荐
相关产品推荐

