【发布时间】:2018-12-20 00:42:06
【问题描述】:
相信我,我已经四处寻找,但我对这个看似无害的问题并不满意。
注意:有一些关于for 循环中批处理变量问题的帖子和答案;许多人可能不会意识到if 块在扩展方面会带来同样的复杂性。
我远不是一个批处理文件爱好者,所以我可能缺少一些基本的东西,但是当我运行以下脚本时:
set testVar1=Initial Value 1
echo testVar1 = %testVar1%
if 1==1 (
echo In If Block
echo testVar1 = %testVar1%
set testVar1=In If Block
echo testVar1 = %testVar1%
set testVar2=Initial Value 2
echo testVar2 = %testVar2%
)
echo Out of If Block
echo testVar1 = %testVar1%
echo testVar2 = %testVar2%
我明白了:
testVar1 = Initial Value 1
In If Block
testVar1 = Initial Value 1
testVar1 = Initial Value 1
testVar2 =
Out of If Block
testVar1 = In If Block
testVar2 = Initial Value 2
而我希望看到的是:
testVar1 = Initial Value 1
In If Block
testVar1 = Initial Value 1
testVar1 = In If Block
testVar2 = Initial Value 2
Out of If Block
testVar1 = In If Block
testVar2 = Initial Value 2
在if 块中,我更改了testVar1 的值,但是当我回显它时,它具有原始值。同样,我在if 块中创建了一个新的testVar2 变量,但是当我回显它时,它的值为空。
然而,一旦我退出 if 块,其中设置的值在回显时是正确的。
正如其他地方所提到的,我对声明中的空格非常小心,并且我尝试了几种变体,但以上是我可以设计来说明问题的最基本测试。
正如我所说,毫无疑问我遗漏了一些明显的东西,但我不知道它是什么。
我也尝试过添加setlocal EnableDelayedExpansion,因为我已经看到了这一点,但没有任何区别。
【问题讨论】:
-
使用延迟扩展还需要使用
!var!而不是%var%以扩展括号块中变量的值。 -
很奇怪你找不到答案。我所做的只是将
enabledelayedexpansion放在搜索框中,它找到了几百个答案。 -
@Squashman 是的,如果您知道要寻找什么,您很可能会找到它!两个建议的重复都集中在
for循环上;我没想到一个简单的if块会产生这种影响,因为没有迭代,只是一个封闭块。我已经编辑了我的问题以强调这一点。 -
赞成您努力将问题归结为基础知识和清晰易懂的问题。
-
@Stephan 谢谢,非常感谢!答案全归功于 npocmaka。
标签: batch-file