首页 > 解决方案 > 如何正确运行命令列表,下一个 cmd 在哪里等到当前 cmd 完成?

问题描述

我正在尝试像这样运行 cmd 列表:

ffmpeg -i "E:\Download\Video\Test\1.mp4" -ss 00:01:14 -vframes 1 "E:\Download\Video\Thumbs\01.png"
ffmpeg -i "E:\Download\Video\Test\2.mp4" -ss 00:01:14 -vframes 1 "E:\Download\Video\Thumbs\02.png"
ffmpeg -i "E:\Download\Video\Test\3.mp4" -ss 00:01:14 -vframes 1 "E:\Download\Video\Thumbs\03.png"
ffmpeg -i "E:\Download\Video\Test\4.mp4" -ss 00:01:14 -vframes 1 "E:\Download\Video\Thumbs\04.png"
ffmpeg -i "E:\Download\Video\Test\5.mp4" -ss 00:01:14 -vframes 1 "E:\Download\Video\Thumbs\05.png"
ffmpeg -i "E:\Download\Video\Test\6.mp4" -ss 00:01:14 -vframes 1 "E:\Download\Video\Thumbs\06.png"
ffmpeg -i "E:\Download\Video\Test\7.mp4" -ss 00:01:14 -vframes 1 "E:\Download\Video\Thumbs\07.png"
ffmpeg -i "E:\Download\Video\Test\8.mp4" -ss 00:01:14 -vframes 1 "E:\Download\Video\Thumbs\08.png"
ffmpeg -i "E:\Download\Video\Test\9.mp4" -ss 00:01:14 -vframes 1 "E:\Download\Video\Thumbs\09.png"
ffmpeg -i "E:\Download\Video\Test\10.mp4" -ss 00:01:14 -vframes 1 "E:\Download\Video\Thumbs\10.png"
ffmpeg -i "E:\Download\Video\Test\11.mp4" -ss 00:01:14 -vframes 1 "E:\Download\Video\Thumbs\11.png"
ffmpeg -i "E:\Download\Video\Test\12.mp4" -ss 00:01:14 -vframes 1 "E:\Download\Video\Thumbs\12.png"
ffmpeg -i "E:\Download\Video\Test\13.mp4" -ss 00:01:14 -vframes 1 "E:\Download\Video\Thumbs\13.png"
ffmpeg -i "E:\Download\Video\Test\14.mp4" -ss 00:01:14 -vframes 1 "E:\Download\Video\Thumbs\14.png"
ffmpeg -i "E:\Download\Video\Test\15.mp4" -ss 00:01:14 -vframes 1 "E:\Download\Video\Thumbs\15.png"
ffmpeg -i "E:\Download\Video\Test\16.mp4" -ss 00:01:14 -vframes 1 "E:\Download\Video\Thumbs\16.png"
ffmpeg -i "E:\Download\Video\Test\17.mp4" -ss 00:01:14 -vframes 1 "E:\Download\Video\Thumbs\17.png"
ffmpeg -i "E:\Download\Video\Test\18.mp4" -ss 00:01:14 -vframes 1 "E:\Download\Video\Thumbs\18.png"
ffmpeg -i "E:\Download\Video\Test\19.mp4" -ss 00:01:14 -vframes 1 "E:\Download\Video\Thumbs\19.png"
ffmpeg -i "E:\Download\Video\Test\20.mp4" -ss 00:01:14 -vframes 1 "E:\Download\Video\Thumbs\20.png"
ffmpeg -i "E:\Download\Video\Test\21.mp4" -ss 00:01:14 -vframes 1 "E:\Download\Video\Thumbs\21.png"
ffmpeg -i "E:\Download\Video\Test\22.mp4" -ss 00:01:14 -vframes 1 "E:\Download\Video\Thumbs\22.png"
ffmpeg -i "E:\Download\Video\Test\23.mp4" -ss 00:01:14 -vframes 1 "E:\Download\Video\Thumbs\23.png"
ffmpeg -i "E:\Download\Video\Test\24.mp4" -ss 00:01:14 -vframes 1 "E:\Download\Video\Thumbs\24.png"
ffmpeg -i "E:\Download\Video\Test\25.mp4" -ss 00:01:14 -vframes 1 "E:\Download\Video\Thumbs\25.png"
ffmpeg -i "E:\Download\Video\Test\26.mp4" -ss 00:01:14 -vframes 1 "E:\Download\Video\Thumbs\26.png"
ffmpeg -i "E:\Download\Video\Test\27.mp4" -ss 00:01:14 -vframes 1 "E:\Download\Video\Thumbs\27.png"
ffmpeg -i "E:\Download\Video\Test\28.mp4" -ss 00:01:14 -vframes 1 "E:\Download\Video\Thumbs\28.png"
ffmpeg -i "E:\Download\Video\Test\29.mp4" -ss 00:01:14 -vframes 1 "E:\Download\Video\Thumbs\29.png"
ffmpeg -i "E:\Download\Video\Test\30.mp4" -ss 00:01:14 -vframes 1 "E:\Download\Video\Thumbs\30.png"
ffmpeg -i "E:\Download\Video\Test\31.mp4" -ss 00:01:14 -vframes 1 "E:\Download\Video\Thumbs\31.png"
ffmpeg -i "E:\Download\Video\Test\32.mp4" -ss 00:01:14 -vframes 1 "E:\Download\Video\Thumbs\32.png"
ffmpeg -i "E:\Download\Video\Test\33.mp4" -ss 00:01:14 -vframes 1 "E:\Download\Video\Thumbs\33.png"
ffmpeg -i "E:\Download\Video\Test\34.mp4" -ss 00:01:14 -vframes 1 "E:\Download\Video\Thumbs\34.png"
ffmpeg -i "E:\Download\Video\Test\35.mp4" -ss 00:01:14 -vframes 1 "E:\Download\Video\Thumbs\35.png"
ffmpeg -i "E:\Download\Video\Test\36.mp4" -ss 00:01:14 -vframes 1 "E:\Download\Video\Thumbs\36.png"
ffmpeg -i "E:\Download\Video\Test\37.mp4" -ss 00:01:14 -vframes 1 "E:\Download\Video\Thumbs\37.png"
ffmpeg -i "E:\Download\Video\Test\38.mp4" -ss 00:01:14 -vframes 1 "E:\Download\Video\Thumbs\38.png"
ffmpeg -i "E:\Download\Video\Test\39.mp4" -ss 00:01:14 -vframes 1 "E:\Download\Video\Thumbs\39.png"
ffmpeg -i "E:\Download\Video\Test\40.mp4" -ss 00:01:14 -vframes 1 "E:\Download\Video\Thumbs\40.png"
ffmpeg -i "E:\Download\Video\Test\41.mp4" -ss 00:01:14 -vframes 1 "E:\Download\Video\Thumbs\41.png"
ffmpeg -i "E:\Download\Video\Test\42.mp4" -ss 00:01:14 -vframes 1 "E:\Download\Video\Thumbs\42.png"
ffmpeg -i "E:\Download\Video\Test\43.mp4" -ss 00:01:14 -vframes 1 "E:\Download\Video\Thumbs\43.png"
ffmpeg -i "E:\Download\Video\Test\44.mp4" -ss 00:01:14 -vframes 1 "E:\Download\Video\Thumbs\44.png"
ffmpeg -i "E:\Download\Video\Test\45.mp4" -ss 00:01:14 -vframes 1 "E:\Download\Video\Thumbs\45.png"
ffmpeg -i "E:\Download\Video\Test\46.mp4" -ss 00:01:14 -vframes 1 "E:\Download\Video\Thumbs\46.png"
ffmpeg -i "E:\Download\Video\Test\47.mp4" -ss 00:01:14 -vframes 1 "E:\Download\Video\Thumbs\47.png"
ffmpeg -i "E:\Download\Video\Test\48.mp4" -ss 00:01:14 -vframes 1 "E:\Download\Video\Thumbs\48.png"
ffmpeg -i "E:\Download\Video\Test\49.mp4" -ss 00:01:14 -vframes 1 "E:\Download\Video\Thumbs\49.png"
ffmpeg -i "E:\Download\Video\Test\50.mp4" -ss 00:01:14 -vframes 1 "E:\Download\Video\Thumbs\50.png"

当我一次复制和粘贴时,它不起作用,因为完成每个命令需要时间,ffmpeg.exe 在它仍在执行当前 cmd 时无法从 cmd.exe 接收下一个 cmd,无论如何我可以告诉cmd.exe 等待当前 cmd 完成,然后执行下一个 cmd?

编辑:

我将尝试逐步描述我的问题:

  1. 我复制上面的命令列表(多行)

  2. 我打开 cmd.exe,导航到 ffmpeg.exe 位置。

  3. 我将复制的数据粘贴到 cmd.exe

预期:完成后,我的 Thumbs 文件夹中应该有 50 个 png 文件。

现实:我的 Thumbs 文件夹中的 png 文件少于 50 个(可能是 1 个或 2 个或 3 个,但少于 50 个)。

结论:ffmpeg遗漏了一些命令,cmd.exe不关心当前cmd是否在执行下一个命令之前完成。

如果我只是一个一个地复制并将每个命令分别粘贴到 cmd.exe 中,它可以工作,但这太慢了,因为我有很多 cmd。

标签: windowsbatch-filecmd

解决方案


如果您的文件确实是按顺序命名的1,增量150,那么您应该做的是运行一个循环命令For /L

窗口:

For /L %A In (1,1,50) Do @ffmpeg -i "E:\Download\Video\Test\%A.mp4" -ss 00:01:14 -vframes 1 "E:\Download\Video\Thumbs\%A.png"

@For /L %%A In (1,1,50) Do @ffmpeg -i "E:\Download\Video\Test\%%A.mp4" -ss 00:01:14 -vframes 1 "E:\Download\Video\Thumbs\%%A.png"


如果您的问题欺骗了我们,并且您的文件未按所示顺序命名,而是具有更多随机名称,那么您应该做的是For使用通配符运行循环命令:

窗口:

For %A In ("E:\Download\Video\Test\*.mp4") Do @ffmpeg -i "%A" -ss 00:01:14 -vframes 1 "E:\Download\Video\Thumbs\%~nA.png"

@For %%A In ("E:\Download\Video\Test\*.mp4") Do @ffmpeg -i "%%A" -ss 00:01:14 -vframes 1 "E:\Download\Video\Thumbs\%%~nA.png"


如果您想明确告诉ffmpeg在移动到下一个之前等待每个完成,尽管它已经这样做了,您可以@ffmpeg在上面的示例中更改为@Start /Wait ffmpeg.

如果您想尝试同时运行所有ffmpeg命令,而不是等待每个命令完成,由于程序或内存限制,不太可能处理许多文件,您可以@ffmpeg在上面的示例中更改为@Start ffmpeg.


如果您的命令已经在纯文本文件内的列表中,您可以将该列表更改为,方法是将其文件扩展名更改为,.bat或者.cmd只需双击它即可运行它。为此,ffmpeg可能需要与批处理文件(命令列表)位于同一目录中,或者位于%PATH%. 在这种情况下,您会在运行时看到每个命令都echo被编辑到屏幕上,如果您不想看到它,请在顶部添加一个新的第一行,其中包含@Echo Off.


推荐阅读