批处理脚本ENDLOCAL / SET if if语句不起作用

时间:2013-03-19 12:23:12

标签: windows batch-file command

我是批处理脚本的新手,我正在编写一个批处理脚本来设置环境变量。下面是我用它的批处理脚本。

if 1 == 1 (
    setlocal enableextensions enabledelayedexpansion
    SET name1=%1_hello
    endlocal & SET name=%name1%
    echo varaiable %name%
    goto :eof
)

但我面临的问题是变量name未设置,name1中的endlocal & SET name=%name1%始终为空或从先前设置的环境变量中获取。 但是没有if statement的相同代码有效。

    setlocal enableextensions enabledelayedexpansion
    SET name1=%1_hello
    endlocal & SET name=%name1%
    echo varaiable %name%
    goto :eof

在上面的代码中,name1变量已设置,并且name正在显示。有人可以帮助我摆脱这个问题。为什么endlocal / set与if语句的行为不同?

1 个答案:

答案 0 :(得分:3)

当解析IF语句时 - 那是从IF到它的右括号,所有%var%都被这些变量的内容替换,因为它们在行是PARSED时,那是在执行之前。