当我运行这个脚本(从一个 .bat 文件):
set var1=true
if "%var1%"=="true" (
set var2=myvalue
echo %var2%
)
我总是得到:
ECHO is on.
意思是说var2
变量并没有真正被设置。 有人可以帮我理解为什么吗?
当我运行这个脚本(从一个 .bat 文件):
set var1=true
if "%var1%"=="true" (
set var2=myvalue
echo %var2%
)
我总是得到:
ECHO is on.
意思是说var2
变量并没有真正被设置。 有人可以帮我理解为什么吗?
变量var2
已经被设置,但是在执行代码块之前,行内的echo %var2%
中却没有展开该变量。
此时,var2
还是个空值。
因此,引入了延迟执行语法,它使用!
代替%
,在执行时而不是解析时进行求值。
请注意,为了使用!
,需要额外添加语句setlocal EnableDelayedExpansion
。
setlocal EnableDelayedExpansion
set var1=true
if "%var1%"=="true" (
set var2=myvalue
echo !var2!
)
我可能有点晚来参加这个派对,但处理这种情况的另一种方法是在 if
之外继续处理,就像这样:
set var1=true
if "%var1%"=="true" (
set var2=myvalue
)
echo %var2%
或/和使用goto
语法
set var1=true
if "%var1%"=="true" (
set var2=myvalue
goto line10
) else (
goto line20
)
. . . . .
:line10
echo %var2%
. . . . .
:line20
这种扩展是在时间内发生的,您不需要使用setlocal EnableDelayedExpansion
。总的来说,如果重新思考脚本的设计,您可以这样做。
这样扩展就会“按时间”发生,您不需要使用setlocal EnableDelayedExpansion
。归根结底,如果重新考虑脚本的设计,您可以这样做。
echo off set var1=true if "%var1%"=="true" ( set var2=myvalue ) echo %var2% pause
.. 而且它是有效的。*"如果您在批处理文件中创建一个可以在程序中任何地方访问的变量"*. https://aticleworld.com/batch-file-variables-and-scope/ - T.S.
&
和&&
运算符遵循相同的规则。这段代码set x=some & set y=%x%thing & echo results %y%
输出%x%thing
。 - gwarahif
和batch
上搜索明确的信息真的很难,尽管我已经搜索了足够多的内容来学习如果jeb(没有!
)说它,那就一定是对的。 - ruffin