If statement Windows批处理if语句受if块中语句的影响
在Windows Server 2012上执行以下Windows批处理脚本时:If statement Windows批处理if语句受if块中语句的影响,if-statement,batch-file,If Statement,Batch File,在Windows Server 2012上执行以下Windows批处理脚本时: @echo off SET v=() IF 1 == 2 ( echo hi echo %v:~0% echo 1 equals 2 ) ELSE ( echo 1 does not equal 2 ) IF 1 == 2 ( echo %v:0% echo 1 equals 2 ) ELSE ( echo 1 does not equal 2 ) 我得到以下输出: 1 equals
@echo off
SET v=()
IF 1 == 2 (
echo hi
echo %v:~0%
echo 1 equals 2
) ELSE (
echo 1 does not equal 2
)
IF 1 == 2 (
echo %v:0%
echo 1 equals 2
) ELSE (
echo 1 does not equal 2
)
我得到以下输出:
1 equals 2
1 does not equal 2
1 does not equal 2
有人能告诉我为什么会这样吗?即使v的值为(),我也不想进入以echo hi开头的块。我不太确定您的意图,但我认为您的问题可以通过以下方式解决 变量
%v%
在运行IF
命令之前进行分析,该变量包含有问题的右括号。因此,代码读取,echo%v:~0%
作为echo(
并关闭IF
和)
然后解析下一行,即echo 1等于2,并按预期打印它
要防止出现这种情况,请在定义该变量时转义该括号:
@echo关闭
设置“v=(^)”
如果1==2(
回声嗨
回显%v:~0%
回声1等于2
)否则(
回声1不等于2
)
如果1==2(
回声%v:0%
回声1等于2
)否则(
回声1不等于2
)
或者,最好还是启用延迟扩展,以便在运行命令之前不解析变量内容,只有在以下情况下:
@echo关闭
设置“v=()”
延迟扩展
如果1==2(
回声嗨
回声!v:~0!
回声1等于2
)否则(
回声1不等于2
)
如果1==2(
回声!v:0!
回声1等于2
)否则(
回声1不等于2
)