如何从根目录运行bat脚本递归将Subtitles.srt移动到对应Subtitles文件夹
问题根因
你原有脚本的核心问题是移动操作的目标路径使用了相对路径,该路径始终相对于脚本运行的工作目录,而非每个Subtitles.srt文件实际所在的父目录,因此只有当前工作目录下的字幕文件能匹配到同层级的Subtitles文件夹,递归到其他层级的文件都会匹配失败。
解决方法
修改批处理逻辑,对每个检索到的字幕文件,先提取其所在的父目录,再拼接同层级的Subtitles文件夹作为目标路径,即可保证每个文件都移动到对应同级目录下的目标文件夹,直接从根目录运行即可完成全量操作。
最终可运行脚本
@echo off setlocal enabledelayedexpansion :: 替换为你的电影资源根目录完整路径 set "ROOT_DIR=D:\你的电影总库根目录" :: 递归检索所有Subtitles.srt文件,/a-d 排除匹配到的同名文件夹 for /f "delims=" %%i in ('dir /b /s /a-d "%ROOT_DIR%\Subtitles.srt"') do ( :: 提取当前srt文件的所在目录绝对路径 set "SRT_PARENT_DIR=%%~dpi" :: 拼接得到同层级Subtitles文件夹的完整路径 set "TARGET_DIR=!SRT_PARENT_DIR!Subtitles" :: 可选:目标文件夹不存在时自动创建,不需要可删除此行 if not exist "!TARGET_DIR!" md "!TARGET_DIR!" :: 执行移动操作 move "%%~i" "!TARGET_DIR!\" ) echo 所有字幕文件移动完成 pause endlocal
补充说明
- 若希望脚本默认处理当前运行所在的目录,将
ROOT_DIR的赋值替换为set "ROOT_DIR=%~dp0"即可。 - 若不需要自动创建不存在的
Subtitles文件夹,删除对应的if not exist判断行即可。
内容的提问来源于stack exchange,提问作者user1868774
相关产品推荐
相关产品推荐

