当前位置:  开发笔记 > 编程语言 > 正文

Windows批处理文件 - ENABLEDELAYEDEXPANSION查询

如何解决《Windows批处理文件-ENABLEDELAYEDEXPANSION查询》经验,为你挑选了1个好方法。

阅读了stackoverflow上的现有帖子,并在网上做了一些阅读.在我丢失太多头发之前,我认为是时候发帖了!

我在批处理文件中有以下代码,我在Windows XP SP3下双击运行:

SETLOCAL ENABLEDELAYEDEXPANSION

::Observe variable is not defined
SET test

::Define initial value
SET test = "Two"

::Observe initial value is set
SET test

::Verify if the contents of the variable matches our condition
If "!test!" == "Two" GOTO TWO

::First Place holder
:ONE

::Echo first response
ECHO "One"

::Second Place holder
:TWO

::Echo second response
ECHO "Two"

::Await user input
PAUSE

ENDLOCAL

基本上我试图确定我是否可以使用条件导航我的脚本.很明显,我在变量范围和延迟变量扩展方面遇到了一些问题,但我对自己做错了有点遗憾.

谁能指出我正确的方向?



1> paxdiablo..:

您当前的问题是您将变量设置为值<"Two">,您可以在此处看到:

@echo off

SETLOCAL ENABLEDELAYEDEXPANSION

::Observe variable is not defined
SET test

::Define initial value
SET test = "Two"

::Observe initial value is set
SET test
echo %test%
echo..%test %.

::Verify if the contents of the variable matches our condition
If "!test!" == "Two" GOTO TWO

::First Place holder
:ONE

::Echo first response
ECHO "One"

::Second Place holder
:TWO

::Echo second response
ECHO "Two"

::Await user input
PAUSE

ENDLOCAL

产生:

Environment variable test not defined
test = "Two"
. "Two".
"One"
"Two"
Press any key to continue . . .

你的"设置测试"输出变量的原因与"set t"的原因相同 - 如果没有特定名称的变量,它将输出以该名称开头的所有变量.

set命令也是一个挑剔的小野兽,不喜欢'='字符周围的空格; 它将它们(以及顺便提到的引号)合并到环境变量名称和分配给它的值中.相反,使用:

set test=Two

此外,在你使用延迟扩展的地方,因为%test%和!test!会扩大相同的.它在以下语句中很有用:

if "!test!" == "Two" (
    set test=TwoAndABit
    echo !test!
)

内部echo将输出TwoAndABit,而%test%(在遇到整个if语句时展开)将导致它输出Two.

尽管如此,为了保持一致性,我总是使用延迟扩展.

推荐阅读
赛亚兔备_393
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有