不同的行为在2个相同的代码在批处理脚本变量延迟扩展
问题描述:
@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”以及?
答
您在2
之后有尾随空格,所以比较if "2 " == "2"
(不等于)。
为了避免这种情况使用下面的代码:
set "VARY=before" if "!VARY!" == "before" ( set "VARY=2" if "!VARY!"=="2" echo If you see this, yes echo !VARY! )
..如果你设置的数字,你也可以使用 “设置/ A”:
set "VARY=before" if "!VARY!" == "before" ( set /a VARY=2 if "!VARY!"=="2" echo If you see this, yes echo !VARY! )
答
很简单。您第一次将VARY
设置为2
而不是2
。
为了避免这种情况总是使用语法set "VARY=2"
这句法只需从第一个到最后一个引号输入,最后一个引号之后的所有字符都将被丢弃。
非常感谢。愚蠢的我没有注意到空白处。 –