变量不像预期的那样运行

提问

我一直在试图在这个批文件上找到语法,我弄不明白为什么有些东西是不工作的。 我每次做的变量都不会增加。 在strc上的连接似乎并没有连接。 这是我的代码: 你不是第一个落入著名的“延迟扩张陷阱”的人(你不会是最后一个)。 如果您想要使用同一块中更改的变量(一个块是括号内的一系列命令),那么您需要延迟扩展。 延迟变量被引用! var !而不是% var。 原因是cmd解析代码的方式。在解析时,用它们的值来替换一个完整的行或块。延迟变量在运行时进行评估。 两个简单的批文件演示: 注意:一行也被视为一个街区: 延迟扩展: 延迟扩展是每个默认值在命令提示符关闭。如果你真的需要它,你可以做到: 也有一种方法可以在不延迟扩展的情况下做同样的事情(但调用需要时间,所以它会变得更慢,但如果出于某种原因,你不能/不想使用延迟扩展,这是另一种选择): 这两种方法也可以用来显示arraylike变量: (这通常被问到“变量包含另一个变量”或“嵌套变量”) 以下是在不同情况下使用类似arraylike变量的集合: 延迟扩展: 不延迟扩张: 注:setlocal在batchfile之外没有任何效果,所以delayedexpansion只工作: 在批处理文件中 当cmd以延迟扩展开始时(cmd / V:ON)(默认情况下,cmd运行延迟扩展) (当你对技术背景或甚至是高级技术方面感兴趣时,请遵循链接)

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
回答

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!"

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%]%%
)

▼版权说明

相关文章也很精彩
推荐内容
更多标签
相关热门
全站排行
随便看看

错说cuoshuo.com——程序员的报错记录

部分内容根据CC版权协议转载,如果您希望取消转载请发送邮件到cuoshuo8@163.com

辽ICP备19011660号-5