我一直在努力尝试在这个批处理文件中获得正确的语法,我不能为我的生活找出为什么有些东西不起作用 .
1)变量'i'没有增加 . 2)strc上的连接似乎不想...好,连接 .
set i=0
set "strc=concat:"
for %%f in (*.mp4) do (
set /a i+=1
set "str=intermediate%i%.ts"
set strc="%strc% %str%|"
ffmpeg -i "%%f" -c copy -bsf:v h264_mp4toannexb -f mpegts "%str%"
)
set strc="%strc:-1%"
ffmpeg -i "%strc%" -c copy -bsf:a aac_adtstoasc Output.mp4
1 回答
你不是第一个陷入着名的“延迟扩张陷阱”的人(你不会是最后一个)
如果要使用在同一块中更改的变量,则需要延迟扩展(块是括号
(
和)
中的一系列命令)延迟变量用
!var!
而不是%var%
引用原因就是这样,
cmd
解析代码 . 一次解析完整的行或块,用解析时的值替换普通变量 . 延迟变量在运行时进行评估 .两个简单的批次演示:
.
注意:一行也被视为一个块:
延迟扩张:
默认情况下,在命令提示符下关闭延迟扩展 . 如果你真的需要它,你可以这样做:
还有一种方法可以在没有延迟扩展的情况下做同样的事情(但是
call
需要花费一些时间,因此它可以替代):这两种方法也可用于显示array-like variables:
(这经常被问到"variable which contains another variable"或"nested variables"
这是一个在不同情况下使用这种类似数组的变量的集合:
with delayed expansion:
without delayed expansion: