Batch file 在IF块内部时,回显异常行为
我有一个名为test.bat的Windows批处理脚本,如下所示: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
@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-链接中对此进行了解释,不过我会更新答案,这很好。谢谢