【问题标题】:Why Aren't Variables Set In Batch File If Block? [duplicate]如果阻塞,为什么不在批处理文件中设置变量? [复制]
【发布时间】: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


【解决方案1】:

好吧,是的,我的无知。这是修复,感谢 npocmaka:

setlocal EnableDelayedExpansionset
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%

(我现在更讨厌批处理文件了!)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-16
    • 2011-12-30
    • 2019-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多