Batch file 在IF块内部时,回显异常行为

Batch file 在IF块内部时,回显异常行为,batch-file,windows-7,echo,Batch File,Windows 7,Echo,我有一个名为test.bat的Windows批处理脚本,如下所示: @ECHO OFF SETLOCAL SET name=Dan SET greeting=Hi %name%, how are you? ECHO %greeting% 执行时,我得到以下输出: Hi Dan, how are you? 这是我所期望的。我将脚本更改为以下内容: @ECHO OFF SETLOCAL IF EXIST test.bat ( SET name=Dan SET greeting=H

我有一个名为test.bat的Windows批处理脚本,如下所示:

@ECHO OFF
SETLOCAL
SET name=Dan
SET greeting=Hi %name%, how are you?
ECHO %greeting%
执行时,我得到以下输出:

Hi Dan, how are you?
这是我所期望的。我将脚本更改为以下内容:

@ECHO OFF
SETLOCAL
IF EXIST test.bat (
    SET name=Dan
    SET greeting=Hi %name%, how are you
    ECHO %greeting%
) ELSE (
    ECHO Nofile
)
ECHO is off.
我希望得到同样的输出。相反,我得到了以下结果:

@ECHO OFF
SETLOCAL
IF EXIST test.bat (
    SET name=Dan
    SET greeting=Hi %name%, how are you
    ECHO %greeting%
) ELSE (
    ECHO Nofile
)
ECHO is off.
请有人帮我理解为什么。

你需要什么

批处理文件有两个读取脚本的阶段——执行和解析。在解析阶段,所有用
%
括起来的变量都被替换,在执行阶段,命令被执行。延迟扩展打开后,
中包含的变量将被打开将在执行阶段展开(即稍后)

另一侧的括号(以及
&
)将命令放在一个块中,作为一个单独的命令,以便在第一阶段替换所有带有
%
的变量,并且在设置变量时需要延迟扩展。

您需要

批处理文件有两个读取脚本的阶段——执行和解析。在解析阶段,所有用
%
括起来的变量都被替换,在执行阶段,命令被执行。延迟扩展打开后,
中包含的变量将被打开将在执行阶段展开(即稍后)


另一侧的括号(以及
&
)将命令放在一个块中,作为一个单独的命令,以便在第一阶段替换所有带有
%
的变量,并且在设置变量时需要延迟扩展。

您能详细说明吗?“我更感兴趣的是了解正在发生的事情,而不是解决方案。”@DanStevens-链接中对此进行了解释,不过我会更新答案,这很好。谢谢你能详细说明吗?“我更感兴趣的是了解正在发生的事情,而不是解决方案。”@DanStevens-链接中对此进行了解释,不过我会更新答案,这很好。谢谢