如何创建批处理文件:将子文件夹文件上移一级并重命名重复文件
批处理解决方案:将子文件夹文件上移一级并自动重命名重复文件
这里有一个专门针对你需求的批处理脚本,它会把SHOW_NAME目录下各SEASON子目录里的子文件夹文件上移到SEASON目录,遇到重复文件时自动添加递增的数字后缀(比如title_episode3(1).mkv、title_episode3(2).mkv),彻底避免覆盖问题:
@echo off setlocal enabledelayedexpansion :: 遍历当前目录下的所有子目录(如SEASON1、SEASON2等) for /d %%s in (*) do ( :: 遍历每个SEASON目录下的子文件夹(如TITLE_EP1、TITLE_EP2等) for /d %%e in ("%%s\*") do ( :: 遍历子文件夹中的所有文件 for %%f in ("%%e\*") do ( :: 定义初始目标路径(SEASON目录下的原文件名) set "target=%%s\%%~nxf" set "counter=1" :: 如果目标文件已存在,生成带递增后缀的新文件名 if exist "!target!" ( :rename_loop set "newtarget=%%s\%%~nf(!counter!)%%~xf" if exist "!newtarget!" ( set /a counter+=1 goto rename_loop ) set "target=!newtarget!" ) :: 执行文件移动操作 move "%%f" "!target!" echo 已完成移动: "%%f" → "!target!" ) :: 可选:移动完成后删除空的子文件夹(不需要可注释此行) rd "%%e" ) ) echo 所有文件处理完成! pause endlocal
脚本说明:
@echo off:关闭命令回显,让输出更简洁易读。setlocal enabledelayedexpansion:启用延迟变量扩展,确保循环中修改的变量能实时生效。- 三层循环结构:
- 第一层遍历
SHOW_NAME下的所有SEASON类子目录; - 第二层遍历每个SEASON目录下的子文件夹(即存放单集文件的文件夹);
- 第三层遍历每个子文件夹中的所有文件。
- 第一层遍历
- 重复文件处理逻辑:如果目标位置已存在同名文件,会自动尝试添加
(1)、(2)等后缀,直到找到一个未被占用的文件名。 - 可选的空目录删除:脚本最后会删除移动完成后的空文件夹,如果你想保留这些空文件夹,只需把
rd "%%e"这一行注释掉(在行首加::)。
使用注意事项:
- 把这个批处理文件直接放在你的
SHOW_NAME目录下运行,不要放到SEASON子目录里; - 建议先备份部分文件进行测试,确保符合你的预期后再批量处理;
- 脚本会处理所有SEASON目录下的子文件夹文件,不管子文件夹的具体名称是什么;
- 不同扩展名的同名文件会被视为不同文件,不会触发重命名(比如
title.mkv和title.txt会保留各自的名字)。
内容的提问来源于stack exchange,提问作者user2826193




