批量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%

原因就是这样, cmdparsing代码。 一次完整的行或块被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!"