You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何正确指定mkvmerge.exe路径以实现全子文件夹批量处理?

解决mkvmerge批处理无需放置子文件夹即可运行的问题

你遇到的问题核心在于没有在循环中正确引用你定义的mkvmerge路径变量,导致系统只能在当前子文件夹中查找程序。下面是具体的修改方案:

问题分析

你已经通过set mkvmerge="D:\mkvmerge.exe"指定了程序的完整路径,但在处理单个FLV文件的循环里,你直接写了mkvmerge.exe,系统会默认在当前工作目录(也就是你pushd进入的子文件夹)寻找这个可执行文件,找不到就会失败。同时在合并文件的语句中,%mkvmerge%的写法在延迟环境变量启用的循环块内也不够稳妥。

修改后的完整批处理代码

setlocal enableDelayedExpansion
set mkvmerge="D:\mkvmerge.exe"
for /d /r %%D in (*) do (
    pushd %%D
    set files=
    for %%A IN (*.flv) do (
        !mkvmerge! -o "%%~nA.mkv" "%%~A"
    )
    if not "!files!"=="" !mkvmerge! -o "output.mkv" !files:~2!
    popd
)
pause

关键修改点

  • 将循环内的mkvmerge.exe替换为!mkvmerge!:因为你启用了延迟环境变量(enableDelayedExpansion),在for循环的代码块(括号内)中,必须用!变量名!的格式来实时引用变量,这样系统会直接调用你指定路径下的mkvmerge.exe。
  • 合并文件语句中的%mkvmerge%也改为!mkvmerge!:同样是为了在延迟环境变量块内正确获取变量值,避免使用循环开始前的旧值。

这样修改后,你只需要保证D:\mkvmerge.exe存在,批处理就能在所有子文件夹中直接调用它,无需复制到每个子目录里。

内容的提问来源于stack exchange,提问作者kmleong

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:04:27