FFmpeg批量处理TS文件时批处理SET变量失效问题求助
FFmpeg批量处理TS文件时批处理SET变量失效问题求助
嘿,我一眼就看出你碰到的是批处理里经典的延迟环境变量扩展坑了!咱们先理清楚问题出在哪:
你写的for循环是一个代码块(就是括号里的所有内容),批处理在执行这个代码块之前,会先把里面所有用%变量名%包裹的变量都替换成它们当前的实际值——但这时候moviename还没被赋值呢,所以到FFmpeg命令里的时候,%moviename%其实是空的,自然就没法正常设置视频标题了。
别担心,改起来很简单,只需要两步:
- 第一步:在脚本最开头加上
setlocal enabledelayedexpansion,开启延迟扩展功能,这样就能用!变量名!的方式实时获取变量的最新值。 - 第二步:把FFmpeg命令里的
%moviename%改成!moviename!,让它在循环执行时才去读取变量的当前值。
下面是修改后的完整代码:
@echo off setlocal enabledelayedexpansion @for /r %%F in (*.ts) do ( echo %%~nxF set /P moviename=NEW VIDEO NAME: "c:\program files\ffmpeg" -y -i "%%F" -map 0 -c copy -metadata title="!moviename!" "%%~pnF.mp4" 2>> output.log ) endlocal
另外补充个小提醒:如果你的视频名字里包含!这个符号,延迟扩展可能会把它吃掉,这时候就得额外处理,但一般日常使用的话上面的代码完全够用啦。
备注:内容来源于stack exchange,提问作者Tomas CH
相关产品推荐
相关产品推荐

