Ste*_*ers 7 windows cmd batch-file echo
@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
Run Code Online (Sandbox Code Playgroud)
在命令行上运行上面的输出是:
测试#1
测试#2
测试#3
C:\ mybatchfilelocation> echo测试#4
测试#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
Run Code Online (Sandbox Code Playgroud)
- 输出 -
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
Run Code Online (Sandbox Code Playgroud)
您可能会发现声明一个简单的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
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2283 次 |
最近记录: |