加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

windows – 为什么@ECHO ON / OFF不在批处理文件IF块中工作?

发布时间:2020-12-14 04:18:53 所属栏目:Windows 来源:网络整理
导读:@echo on和@echo off在批处理文件中的括号if块中执行时似乎没有任何影响.这是一个简单的演示: @echo offecho Test #1if 1 == 1 ( @echo on echo Test #2 @echo off echo Test #3)@echo onecho Test #4 在命令行上运行上面的输出是: Test #1 Test #2 Test #
@echo on和@echo off在批处理文件中的括号if块中执行时似乎没有任何影响.这是一个简单的演示:
@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和标签来修复,但如果可能的话,我更愿意继续使用括号中的块…)

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

但是有一个例外 – 在FOR … DO之后的命令确实在同一个块内进行状态更改:-)

请注意,当ECHO当前为ON时,您只需要@来抑制命令输出.如果它是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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读