使用Windows Batch批量将文件夹重命名为内部TXT文件名
刚好处理过类似的批量重命名需求,给你分Windows和Linux/macOS两种常用场景提供解决方案,都是实测可行的:
Windows 批处理解决方案
把下面的代码保存成rename_folders.bat,放在包含那3000个文件夹的父目录里,双击运行即可:
@echo off setlocal enabledelayedexpansion :: 遍历当前目录下的所有子文件夹 for /d %%d in (*) do ( :: 进入当前文件夹 pushd "%%d" :: 找到唯一的TXT文件 for %%f in (*.txt) do ( :: 获取不带后缀的文件名 set "newName=%%~nf" :: 返回上级目录 popd :: 重命名文件夹,避免重复覆盖 if not exist "!newName!" ( ren "%%d" "!newName!" ) else ( echo 警告:文件夹名称 !newName! 已存在,跳过 %%d ) :: 每个文件夹只有一个TXT,找到就跳出循环 goto :nextFolder ) :nextFolder ) echo 处理完成! pause
脚本说明
- 自动遍历当前目录下的所有子文件夹
- 进入每个文件夹后找到唯一的TXT文件,提取它的主文件名(去掉
.txt后缀) - 返回上级目录重命名原文件夹,如果目标名称已经存在,会打印警告并跳过,防止意外覆盖
Linux/macOS Shell 脚本解决方案
把下面的代码保存成rename_folders.sh,放在目标父目录里,终端运行chmod +x rename_folders.sh赋予执行权限,再运行./rename_folders.sh即可:
#!/bin/bash # 遍历当前目录下的所有子文件夹 for dir in */; do # 去掉目录路径末尾的斜杠 dir=${dir%/} # 查找该目录下的TXT文件(仅一级目录,不深入子文件夹) txt_file=$(find "$dir" -maxdepth 1 -type f -name "*.txt") # 检查是否找到有效TXT文件 if [ -n "$txt_file" ]; then # 获取不带后缀的文件名 new_name=$(basename "$txt_file" .txt) # 避免重复命名冲突 if [ ! -d "$new_name" ]; then mv "$dir" "$new_name" echo 已重命名 "$dir" 为 "$new_name" else echo 警告:目标文件夹 "$new_name" 已存在,跳过 "$dir" fi else echo 警告:文件夹 "$dir" 中未找到TXT文件,跳过 fi done echo 所有处理完成!
脚本说明
- 逻辑和Windows批处理一致,适配类Unix系统的路径规则
- 用
find命令精准定位文件夹内的TXT文件,确保只找当前层级的文件(符合你说的无任何子文件夹的情况) - 同样加入了重复名称判断,避免覆盖已有文件夹
重要注意事项
- 先测试! 先挑选3-5个测试文件夹,运行脚本确认效果没问题后,再批量处理3000个文件夹,避免意外损失
- 脚本支持带空格、特殊字符(比如
&、#)的TXT文件名,因为所有路径都用引号包裹了 - 如果有多个文件夹重命名后名称重复,脚本会自动跳过并提示,你可以手动给这些重复的名称加序号(比如
myfile_1、myfile_2)来区分 - 务必确保脚本放在正确的父目录,也就是直接包含那3000个哈希命名文件夹的目录下,不要放错层级
内容的提问来源于stack exchange,提问作者Hunter_AP
相关产品推荐
相关产品推荐

