FFmpeg 在当前文件夹批量转换格式bat脚本

cd workshop
cd resume
start
是在当前目录下打开CMD命令窗口的bat脚本,然后CMD命令窗口复制此命令for %i in (*.flv) do ffmpeg -i "i" -c copy "~ni.mp4,才能批量转当前文件夹里flv,求能够整合到一键批量转换当前文件夹的bat脚本。

你这是南辕北辙啊,直接把你要运行的命令保存在bat里,然后把bat文件复制粘贴到要处理的文件夹里,双击运行就是了……
第一个bat压根不是必要的,那是你手动输命令才需要的…压根不是运行命令需要的

例如你创建一个bat,内容如下(由于你的代码格式有问题,我就随便乱写了):

for %i in (*.flv) do ffmpeg -i %i -c copy %~ni.mp4

然后把这个bat放在你需要的文件夹里运行就可以了,bat自己会使用cmd运行的,不需要你多此一举打开窗口输入

你先把基本理论搞清楚,多自己尝试,这个问题属实小白极了

就当我多嘴,我额外解释下吧。
你打开的cmd窗口,是人手工输入命令的地方。
人们发现,每条命令都手输太费事了,很多时候都是输入重复的一顿命令。不如我一次性把要运行的所有命令都写在某个地方,然后让机器一次性按顺序全运行了。 那个地方就是bat文件
bat文件是批处理文件,或者说是脚本。你把命令一条条写在里头后,双击这个文件,系统就会使用cmd,按顺序执行命令…

#补充

而且,你第一个bat也是错的,不是在当前目录打开cmd窗口…
你阅读第一行,cd workshop意思是进入当前位置的子文件夹workshop里,如果运行成功cmd的工作目录就变成workshop了
同理第二行是在第一行的基础上,再进入子文件夹resume……
¿请问这几行,对“在当前目录打开cmd窗口”这一目的有正确的作用吗?

你能运行后依然得到“在当前目录打开cmd窗口”的结果,只是因为前2行运行失败了,不存在workshop文件夹或者resume文件夹让cmd进入,所以工作目录没有变化,还留在当前这个目录里。

综上:第一个bat唯一有用的只有start语句

image_5 (2)
我尝试过这样,但只是打开CMD窗口,不运行最后一排命令。

因为只需要最后一句就行了
start打开了新的cmd窗口,阻塞了后面语句的运行

而且你最后一句是错的!!!!当然不会有结果!!!!
你自己看看双引号是不是成对的?

求求了,复制命令时认真核对一下吧,复制也不要复制错啊

我十分建议bat以pause这一语句作为最后一行,这样就能看到前面运行错误的提示,而不是直接结束,窗口一闪而过,看不到错误

一些命令
pause

不再回复了,认真仔细+百度搜索错误提示,就可以解决问题

没劲。你把需求讲明白啊。cd workshop, cd resume想要执行成功,bat所在目录必须存在这俩目录啊,不过话说,这俩目录,你是干嘛用?

然后,不需要用start命令,如果你想隐藏运行bat的话,

Set ws = CreateObject(“Wscript.Shell”)
ws.run “cmd /c 批处理程序名”, vbhide

把这两句保存成*.vbs,放在bat所在目录下运行就可以。

最后,让ffmpeg管用的那个命令,按照@shadows 指导写在bat文件里就行了。

1:首先手动测试你的命令在CMD里是有报错的。
2:如果直接运行已经保存的bat脚本,不管你是你写的还是我的命令,是不会转换格式。



@shadows

cmd 命令和 bat 文件中 for 循环引用变量不完全相同,例如 cmd 命令中的 %i ,在 bat 文件中则需改为 %%i 。
具体可参考微软文档:for | Microsoft Docs

所以想双击 bat 完成当前目录下的所有 flv 文件转 mp4,需将 bat 文件内容修改如下:

for %%i in (*.flv) do ffmpeg -i %%i -c copy %%~ni.mp4

效果图,目标文件夹下双击 bat :

按照你的方法修改bat文件后,还是不行,

不需要预先打开 cmd 窗口,双击 bat 运行就可以。

效果图,目标文件夹下双击 bat :

得考虑文件名是否有空格,最好加上引号

for %%i in (*.flv) do ffmpeg -i "%%i" -c copy "%%~ni.mp4"
1 Like