为了账号安全,请及时绑定邮箱和手机立即绑定

变量的行为不符合预期

/ 猿问

变量的行为不符合预期

变量的行为不符合预期

我一直在努力尝试在这个批处理文件中获得正确的语法,我无法弄清楚为什么有些东西不起作用。

  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解析代码。一次解析完整的行或块,用解析时的值替换普通变量。延迟变量在运行时进行评估。


两个简单的批处理文件来演示:


setlocal EnableDelayedExpansion

set "var=hello"

if 1==1 (

    set "var=world"

    echo %var% !var!

)

setlocal EnableDelayedExpansion

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! 

默认情况下,在命令提示符下关闭延迟扩展。如果你真的需要它,你可以这样做:


cmd /V:ON /C "set "var=hello" & echo !var!"

还有一种方法可以做同样没有延迟扩展(但call花费一些时间,所以它更慢,但如果由于某种原因你不能/不想使用延迟扩展,它是一个替代):


setlocal DISabledelayedexpansion

for /L %%i in (1 1 5) do (

    call echo %random% %%random%% 

)

这两种方法也可用于显示类似数组的变量

(这通常被问为“包含另一个变量的变量”或“嵌套变量”)

这是一个在不同情况下使用这种类似数组的变量的集合:

延迟扩展:


setlocal ENableDelayedExpansion

set "num=4"

set "var[%num%]=HELLO"

echo plain delayed: !var[%num%]!

for /L %%i in (4 1 4) do (

    echo for delayed: !var[%%i]!

    set a=%%i

    call echo for delayed with variable: %%var[!a!]%%

)

没有延迟扩张:


setlocal DISableDelayedExpansion

set "num=4"

set "var[%num%]=HELLO"

call echo plain called: %%var[%num%]%%

for /L %%i in (4 1 4) do (

    call echo FOR called: %%var[%%i]%%

    set a=%%i

    call echo FOR called with variable: %%var[%a%]%%

)

注:setlocal具有批处理文件中的外没有任何影响,所以delayedexpansion只适用:

-在批处理文件

-当CMD开始与延迟扩展启用(cmd /V:ON)(默认情况下,CMD与延迟扩展运行DIS体健)


查看完整回答
反对 回复 2019-05-22
  • 1 回答
  • 0 关注
  • 141 浏览
我要回答

相关问题推荐

慕课专栏
更多

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信