@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”吗?
答案 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! )