Windows 如果语句不起作用,则批处理脚本ENDLOCAL/SET inside
我不熟悉批处理脚本,我正在编写一个批处理脚本来设置环境变量。下面是我用于它的批处理脚本Windows 如果语句不起作用,则批处理脚本ENDLOCAL/SET inside,windows,batch-file,command,Windows,Batch File,Command,我不熟悉批处理脚本,我正在编写一个批处理脚本来设置环境变量。下面是我用于它的批处理脚本 if 1 == 1 ( setlocal enableextensions enabledelayedexpansion SET name1=%1_hello endlocal & SET name=%name1% echo varaiable %name% goto :eof ) 但是我面临的问题是变量name未设置,并且endlocal&set name=
if 1 == 1 (
setlocal enableextensions enabledelayedexpansion
SET name1=%1_hello
endlocal & SET name=%name1%
echo varaiable %name%
goto :eof
)
但是我面临的问题是变量name
未设置,并且endlocal&set name=%name1%
中的name1
始终为空或从以前设置的环境变量中获取。
但是不带if语句的相同代码可以工作
setlocal enableextensions enabledelayedexpansion
SET name1=%1_hello
endlocal & SET name=%name1%
echo varaiable %name%
goto :eof
在上面的代码中,name1
变量被设置,并且name
被显示。有人能帮我解决这个问题吗。为什么endlocal/set
与if语句的行为不同?当解析if语句时,从if
到它的右括号,所有%var%
都被解析行时的变量内容所取代,这是在执行之前。当解析IF语句时,从IF
到它的右括号,所有%var%
都被解析行时的变量内容替换,也就是在执行之前。因此使用条件GOTO跳过代码块,代替条件()块SSO使用条件转到跳过代码块,而不是条件()块