在2个相同的代码段中,批处理脚本中的延迟变量扩展的不同行为

时间:2013-05-26 19:10:58

标签: windows batch-file cmd delayedvariableexpansion

@echo off
pushd

setlocal enabledelayedexpansion enableextensions

set VARY=before
if "!VARY!" == "before" (
set VARY=2    
if "!VARY!" == "2" @echo If you see this, yes echo !VARY!
)


set VAR=before
if "!VAR!" == "before" (
set VAR=1
if "!VAR!" == "1" @echo If you see this, it worked
)

popd

预期产出:
    如果你看到这个,是的2     如果你看到这个,那就有效了

实际输出:
    如果你看到这个,那就有效了

有人可以解释为什么输出没有显示“如果你看到这个,是2”吗?

2 个答案:

答案 0 :(得分:1)

这很简单。您第一次将VARY设置为2而不是2

为避免这种情况,请始终使用语法set "VARY=2"

此语法仅接受从第一个引号到最后一个引号的输入,删除最后一个引号之后的所有字符。

答案 1 :(得分:1)

2后面有尾随空格,因此请比较if "2 " == "2"(不等于)。

要避免这种情况,请使用以下代码:

set "VARY=before"
if "!VARY!" == "before" (
set  "VARY=2"
if "!VARY!"=="2" echo If you see this, yes echo !VARY!
)

..如果你设置数字,你也可以使用“set / a”:

set "VARY=before"
if "!VARY!" == "before" (
set /a VARY=2
if "!VARY!"=="2" echo If you see this, yes echo !VARY!
)