如果不工作,Windows 批处理 SET 内部 [英] windows batch SET inside IF not working

查看:26
本文介绍了如果不工作,Windows 批处理 SET 内部的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

当我运行这个脚本时(从 .bat 文件):

when I'm running this script (from a .bat file):

set var1=true
if "%var1%"=="true" (
  set var2=myvalue
  echo %var2%
)

我总是得到:

ECHO is on.

意味着 var2 变量并未真正设置.谁能帮我理解为什么?

Meaning the var2 variable was not really set. Can anyone please help me understand why?

推荐答案

var2 已设置,但行 echo %var2% 中的扩展发生在块执行之前.
此时var2为空.

var2 is set, but the expansion in the line echo %var2% occurs before the block is executed.
At this time var2 is empty.

因此存在delayedExpansion 语法,它使用! 而不是% 并且在执行时而不是解析时进行评估.

Therefore the delayedExpansion syntax exists, it uses ! instead of % and it is evaluated at execution time, not parse time.

请注意,为了使用!,需要附加语句setlocal EnableDelayedExpansion.

Please note that in order to use !, the additional statement setlocal EnableDelayedExpansion is needed.

setlocal EnableDelayedExpansion
set var1=true
if "%var1%"=="true" (
  set var2=myvalue
  echo !var2!
)

这篇关于如果不工作,Windows 批处理 SET 内部的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆