批量variables不按预期行事
我一直在摔跤试图获得这个batch file的权利,我不能为我的生活弄清楚为什么有些东西不工作。
1)variables“我”没有得到增加。 和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
你不是第一个落入着名的“延期扩张陷阱”(你不会是最后一个)
如果要使用variables,则需要延迟扩展,而在同一个块中进行了更改(块是括号(
和)
内的一系列命令)
延迟variables被引用!var!
而不是%var%
原因就是这样, cmd
parsing代码。 一次完整的行或块被parsing,用parsing时的值replace正常的variables。 延迟variables在运行时进行评估。
两个简单的批次来演示:
setlocal enabledelayedexpansion set "var=hello" if 1==1 ( set "var=world" echo %var% !var! )
。
for /L %%i in (1,1,5) do ( echo %random% !random! )
注意:一行也被视为一个块:
set "var=old" set "var=new" & echo %var%
延期扩张:
setlocal enabledelayedexpansion set "var=old" set "var=new" & echo !var!
延迟扩展在命令提示符处被closures。 如果你确实需要它,你可以这样做:
cmd /v:on /c "set "var=hello" & echo !var!"