如何用Batch批量重命名文件夹?按文本文件对应行匹配更名
用Batch实现文件夹批量对应重命名
没问题,作为Batch新手,这种逐行配对的重命名需求其实用计数器+双循环就能轻松搞定,我给你写一个完整的脚本,还会一步步解释每个部分的作用,方便你理解:
完整脚本代码
@echo off setlocal enabledelayedexpansion :: 初始化计数器,用来记录当前处理的行数 set "count=0" :: 循环读取folder.txt中的每一行(旧文件夹名) for /f "tokens=* delims=" %%a in (folder.txt) do ( set /a count+=1 :: 读取gbv.txt中对应行数的新名称(跳过前!count!-1行,取当前行) for /f "skip=!count!-1 tokens=* delims=" %%b in (gbv.txt) do ( :: 检查旧文件夹是否存在 if exist "%%a" ( :: 检查新名称的文件夹是否已存在 if not exist "%%b" ( echo 正在重命名: "%%a" -> "%%b" rename "%%a" "%%b" ) else ( echo 警告: 新名称"%%b"已存在,跳过重命名"%%a" ) ) else ( echo 警告: 文件夹"%%a"不存在,跳过 ) :: 读完对应行就跳出内层循环,避免读取gbv.txt后续行 goto :next_line ) :next_line ) echo 重命名操作完成! pause endlocal
关键部分解释
@echo off:关闭命令行的默认命令输出,让脚本运行过程更整洁setlocal enabledelayedexpansion:启用延迟环境变量扩展,确保循环里修改的计数器变量能实时生效for /f "tokens=* delims=" %%a in (folder.txt):完整读取folder.txt的每一行,哪怕文件夹名包含空格也不会被拆分set /a count+=1:每处理一行旧文件夹名,计数器加1,用来精准匹配gbv.txt的对应行for /f "skip=!count!-1 tokens=* delims=" %%b in (gbv.txt):跳过前count-1行,读取gbv.txt的第count行作为新名称- 两个
if判断:分别检查旧文件夹是否存在、新名称是否已被占用,避免运行时出现报错或意外覆盖
使用注意事项
- 把脚本保存为
rename_folders.bat,和folder.txt、gbv.txt以及要重命名的文件夹放在同一个目录下 - 确保
folder.txt和gbv.txt的行数完全一致,不然行数较多的文件里超出的行会被忽略 - 如果文件夹名称包含
&、!这类特殊字符,可能需要额外调整脚本,但日常使用的普通名称都能正常处理
内容的提问来源于stack exchange,提问作者Oleg_08




