重定向 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
前面加上@
来避免调试输出。
我想做的是:
(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
前面加上@
来避免调试输出。