如何基于无序文本文件批量匹配并重命名文件夹?
批处理脚本:基于文本匹配的精准文件夹重命名
需求说明
现有数百个无序文件夹,需根据albumsids.txt中的规则重命名——文本文件每行格式为唯一ID_原文件夹名称,需根据原文件夹名称匹配对应行,将原文件夹重命名为该行完整内容。
修改后的脚本
@echo off setlocal EnableDelayedExpansion :: 加载重命名映射表:键=原文件夹名,值=目标新名称 for /f "usebackq delims=" %%c in ("albumsids.txt") do ( :: 分割行内容:下划线前为唯一ID,后续为原文件夹名称 for /f "tokens=1* delims=_" %%b in ("%%c") do ( set "rename_map[%%d]=%%c" ) ) :: 遍历当前目录所有文件夹,匹配并执行重命名 for /d %%a in (*) do ( if defined rename_map[%%a] ( echo 正在重命名:"%%a" → "!rename_map[%%a]!" ren "%%a" "!rename_map[%%a]!" ) else ( echo 未找到匹配项,跳过:"%%a" ) ) endlocal
脚本说明
映射表构建:
- 读取
albumsids.txt的每一行,通过嵌套for循环分割出原文件夹名称(下划线后的全部内容),将完整行内容作为目标名称存入以原文件夹名为键的变量映射表中。 - 支持原文件夹名称包含空格或下划线(只要唯一ID部分不含下划线即可)。
- 读取
文件夹遍历与重命名:
- 使用
for /d遍历当前目录下的所有文件夹。 - 检查当前文件夹名是否存在于映射表中,存在则执行重命名,否则跳过并提示。
- 使用
注意事项
- 格式校验:确保
albumsids.txt每行严格遵循唯一ID_原文件夹名称格式,唯一ID部分不能包含下划线(若需包含,需调整分割逻辑)。 - 安全测试:首次运行时可将
ren命令改为echo ren,预览所有重命名操作,确认无误后再移除echo执行实际修改。 - 延迟扩展:启用
EnableDelayedExpansion确保变量动态读取和赋值正常工作。
内容的提问来源于stack exchange,提问作者Ionut Bejinariu
相关产品推荐
相关产品推荐

