阅读了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
基本上我试图确定我是否可以使用条件导航我的脚本.很明显,我在变量范围和延迟变量扩展方面遇到了一些问题,但我对自己做错了有点遗憾.
谁能指出我正确的方向?
您当前的问题是您将变量设置为值<"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.
尽管如此,为了保持一致性,我总是使用延迟扩展.