重定向 cmd.exe 中 for 循环的输出

Redirect the output of a for loop in cmd.exe

我想做的是:

(for %%a in ('command') DO something) | anothercommand

不幸的是 cmd.exe 像这样解析括号:

v open                v close
(for %%a in ('command') DO something) | anothercommand 

如果我不在 for 周围使用括号,那么 anothercommand 将被视为在 DO 块中。

这迫使我输出每个 DO 块迭代的结果 到一个临时文件,然后再次读取它:

for %%a in ('command') DO echo %%a >> file.txt
anothercommand < file.txt

我正在寻找一种更简洁的解决方案,它不会因为从存储中写入和读取而造成自身瓶颈。

您的假设是错误的,cmd.exe 不会关闭您命令后的第一个括号。
您的代码中还有另一个问题。

工作示例:

( FOR /F "delims=" %%A in ('dir') do @echo ##File: %%A ) | findstr /N "^"

但是管道的主要问题是,双方都在一个新的子 cmd.exe 实例中执行。
它在命令行上下文中有 运行,而不是批处理文件上下文。
因此语法有点变化,需要在echo前面加上@来避免调试输出。