为什么bat脚本的if子句中的'echo on'无效?

时间:2018-12-04 22:41:19

标签: batch-file echo

使用以下代码,

echo off
if 1==1 (
    echo on
    pwd
)

我期望以下输出

C:\> echo off
pwd
C:/

但是我正在得到这些。

C:\> echo off
C:/

在if子句中再次打开echo后,为什么缺少'pwd'?

1 个答案:

答案 0 :(得分:1)

完整代码

:: Read 1.
echo off

:: Echo off here and will affect Read 2.
@echo

:: Read 2.
if 1==1 (
    echo on
    cd
)

:: Echo on here and will affect Read 3.
@echo

:: Read 3.
cd

从解释器读取的3条内容是此代码的重点。 @echo被忽略,因为它只是为了显示实际内容 当前echo的测试状态。

第一读是:

echo off

默认情况下,脚本以echo on开始,因此读取的内容将以echo on显示。

二读是:

if 1==1 (
    echo on
    cd
)

括号引起多行代码块,因此将其读为一读。 echo on的执行在下一次读取之前不会生效。 该代码块中的echo on现在来不及影响 当前读取,因为它已经被读取。

三读是:

cd

第二次读取的echo on将影响第三次读取,并且echo 在执行命令之前先执行命令cd