gpt4 book ai didi

windows - 为什么 @ECHO ON/OFF 在批处理文件 IF block 中不起作用?

转载 作者:可可西里 更新时间:2023-11-01 13:05:13 31 4
gpt4 key购买 nike

@echo on@echo off 在批处理文件中带括号的 if block 中执行时似乎没有任何影响.这是一个简单的演示:

@echo off
echo Test #1
if 1 == 1 (
@echo on
echo Test #2
@echo off
echo Test #3
)
@echo on
echo Test #4

在命令行上运行上面的输出是:

Test #1
Test #2
Test #3
C:\mybatchfilelocation>echo Test #4
Test #4

任何人都可以对此进行解释和/或提出解决方法吗? (预计它可能可以通过大量使用 goto 和标签来修复,但如果可能的话,我更愿意继续使用括号中的 block ...)

最佳答案

正如您所发现的,解析器无法识别更改的 ECHO 状态,直到它到达包含 ECHO ON/OFF 的代码块之后的语句。

但有一个异常(exception) - FOR ... DO 之后的命令确实会在同一 block 内进行状态更改:-)

请注意,当 ECHO 当前打开时,您只需要 @ 来抑制命令输出。如果它是 OFF,则不需要 @ECHO ON。如果您在同一个代码块中打开和关闭它,那么您也不需要它。

这是一个回显偶数测试行的演示:

@echo off
echo Test #1
(
echo on
for %%. in (.) do echo Test #2
echo off
echo Test #3
echo on
for %%. in (.) do echo Test #4
echo off
echo Test #5
)
echo on
echo Test #6
@echo off
echo Test #7

-- 输出--

Test #1

C:\test>echo Test #2
Test #2
Test #3

C:\test>echo Test #4
Test #4
Test #5

C:\test>echo Test #6
Test #6
Test #7

您可能会发现声明一个简单的echo_on“宏”很方便。以下产生完全相同的输出:

@echo off
setlocal

set "echo_on=echo on&for %%. in (.) do"

echo Test #1
(
%echo_on% echo Test #2
echo off
echo Test #3
%echo_on% echo Test #4
echo off
echo Test #5
)
echo on
echo Test #6
@echo off
echo Test #7

关于windows - 为什么 @ECHO ON/OFF 在批处理文件 IF block 中不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34853229/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com