windows - 如何正确运行命令列表,下一个 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?
编辑:
我将尝试逐步描述我的问题:
我复制上面的命令列表(多行)
我打开 cmd.exe,导航到 ffmpeg.exe 位置。
我将复制的数据粘贴到 cmd.exe
预期:完成后,我的 Thumbs 文件夹中应该有 50 个 png 文件。
现实:我的 Thumbs 文件夹中的 png 文件少于 50 个(可能是 1 个或 2 个或 3 个,但少于 50 个)。
结论:ffmpeg遗漏了一些命令,cmd.exe不关心当前cmd是否在执行下一个命令之前完成。
如果我只是一个一个地复制并将每个命令分别粘贴到 cmd.exe 中,它可以工作,但这太慢了,因为我有很多 cmd。
解决方案
如果您的文件确实是按顺序命名的1
,增量1
为50
,那么您应该做的是运行一个循环命令For /L
从cmd窗口:
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
使用通配符运行循环命令:
从cmd窗口:
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
.
推荐阅读
- javascript - 如何使用 Python 从 HTML 文件运行脚本?
- python - 过滤来自 Box SDK (Python) 的警告
- firebase - 仅当应用托管在 Firebase 中时,请求才被 CORS 政策阻止
- flutter - 如何在flutter中调用和等待同步函数内部完成的异步函数
- flutter - 如果您使用 dart only 包(riverpod)或如何在没有上下文的情况下使用 Provider,如何收听更改?
- html - 如何在最新版本的 Safari 上获取我的 href="tel:" 以立即识别这是一个电话并显示“呼叫”按钮?
- r - 如何计算R中重复的变量
- r - RShiny 静态文本和 textOutput 在同一行
- php - 如何在 Laravel 6 中编辑多值选择输入?
- asp.net - 无法弄清楚如何在 RESTful Api 中使用 AutoMapper 和 Post Action