如何通过批处理脚本按文件名中的01-03集数过滤将视频文件分类移动到对应文件夹?
如何通过批处理脚本按文件名中的01-03集数过滤将视频文件分类移动到对应文件夹?
哈哈,我完全get到你的需求了!你手头有成千上万部剧集的视频文件,每部剧大概40集,现在想把同一部剧的所有集都归到对应的专属文件夹里,而不是之前用的脚本那样每个文件单独建个文件夹——毕竟那样太乱了,对吧?
先说说你之前用的脚本问题在哪:那个脚本是对每个文件创建一个以文件名命名的文件夹,然后把单个文件移进去,这显然不符合你“把同一部剧的所有集放一起”的需求。下面给你量身定制几个解决方案,你可以根据自己的文件名格式来选:
方案一:针对集数是末尾两位数字的情况(最通用)
如果你的文件名格式是[剧集前缀][两位集数].[扩展名],比如:
Curtain.Call.S01E01.mp4Derailment.2023.ep02.mkvJoseon.Attorney.A.Morality.S01E03.avi
直接用这个脚本就行:
@echo off setlocal enabledelayedexpansion :: 这里可以修改成你实际的视频扩展名,用空格分隔多种格式 set "video_exts=mp4 mkv avi mov" :: 遍历所有指定扩展名的视频文件 for %%e in (%video_exts%) do ( for %%f in (*.%%e) do ( :: 提取文件名(不含扩展名) set "filename=%%~nf" :: 截取文件名前半部分,去掉最后两位的集数 set "drama_folder=!filename:~0,-2!" :: 创建剧集文件夹(已存在则忽略错误) md "!drama_folder!" 2>nul :: 移动当前文件到对应文件夹 move "%%f" "!drama_folder!" ) ) echo 所有视频文件分类完成! pause
脚本说明:
@echo off:关闭命令行的命令回显,让输出更清爽setlocal enabledelayedexpansion:启用延迟变量扩展,保证for循环里的变量能实时更新set "video_exts=...":这里可以添加你所有的视频格式,比如要处理flv文件就加个flv!filename:~0,-2!:这是核心操作,把文件名的最后两位(也就是集数)删掉,剩下的就是剧集名称,用来创建文件夹
方案二:如果集数是三位数字(比如E100)
要是你的剧集超过99集,集数是三位数字,只需要把脚本里的!filename:~0,-2!改成!filename:~0,-3!就行,其他部分不变。
方案三:针对集数前有固定标识的情况(比如E/ep)
如果你的集数前面有固定的标识,比如S01EXX或者epXX,可以用更精准的方式截取剧集前缀:
@echo off setlocal enabledelayedexpansion set "video_exts=mp4 mkv avi" for %%e in (%video_exts%) do ( for %%f in (*.%%e) do ( set "filename=%%~nf" :: 先找是否有"E"标识,截取E前面的部分加E作为前缀 set "temp=!filename:E=%%!" if not "!temp!"=="!filename!" ( set "drama_folder=!filename:%%=E!" ) else ( :: 没有E的话找"ep"标识 set "temp=!filename:ep=%%!" if not "!temp!"=="!filename!" ( set "drama_folder=!filename:%%=ep!" ) ) md "!drama_folder!" 2>nul move "%%f" "!drama_folder!" ) ) echo 分类完成! pause
这个脚本会自动识别E或ep标识,把标识前面的内容加标识作为文件夹名,比如Curtain.Call.S01E01会提取成Curtain.Call.S01E,Derailment.2023.ep01会提取成Derailment.2023.ep,更贴合你的真实文件名格式。
重要提醒:
- 先测试再批量处理:建议先找几个测试文件,新建一个文件夹放进去,试用脚本确认效果,避免误操作
- 备份文件:如果文件很重要,最好先备份一份再运行脚本
- 调整扩展名:一定要把脚本里的
video_exts改成你实际的视频格式,不然会漏掉文件
备注:内容来源于stack exchange,提问作者owais owais
相关产品推荐
相关产品推荐

