Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 如果语句不起作用,则批处理脚本ENDLOCAL/SET inside_Windows_Batch File_Command - Fatal编程技术网

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使用条件转到跳过代码块,而不是条件()块