如何防止批处理文件循环回显括号

如何防止批处理文件循环回显括号

如何防止批量回显括号

批处理文件

@C:
@CD \Users
@for /D %%d in ("*") do (
 @echo "%%d"
)

输出

C:\Users>()
"Administrator"
...
C:\Users>()
"Public"

答案1

在第一行添加@echo off并在接下来的几行中删除@

@echo off 

cd /d C:\Users
for /D %%d in ("*") do (
  echo "%%d"
)
  • 或者直接删除(),如果你只打算在循环中使用一个命令/行,则没有必要
@CD /d C:\Users
@for /D %%d in ("*") do @echo "%%d"

观察:

CD /D C:\User
/D == goto Drive, so is the same:
C:
CD User


答案2

我没有看到针对 OP 的特定问题的答案:在 FOR 命令中使用括号时,如何防止批量回显括号(如示例中所示)。是的,在这种情况下可以删除它们,但假设有人确实希望在命令回显中抑制它们(正如实际要求的那样),因为即使只是为了可读性,它们也确实对单个命令有用...

如果命令 ECHO 为 OFF(默认),则前导 @(at)符号将禁止回显当前命令。在 FOR 循环中,“do ” [“d”-“o”-space] 之后的所有内容都将成为新的当前命令用于迭代 FOR 循环,包括括号 () 命令块。这些块中的每个(或唯一)命令都可以使用前导 @ 来抑制回显,如原始示例所示。如果块内的每个命令都使用前导 @ 来抑制回显,那么唯一回显的内容将是空括号集。

或者,可以通过在命令块前面加上 @ 来抑制整个命令块内所有下一级命令的回声:

@C:
@CD \Users
@for /D %%d in ("*") do @(
 echo "%%d"
)

通过将前导 @ 移到命令块外部,最初回显的空集也会受到回显抑制。

相关内容