如何使 Windows START 命令通过管道接受标准输入并将其传递给它调用的命令?

How to make Windows START command accept standard input via pipe and pass it on to the command it invokes?

查看此脚本保存在名为 foo.cmd 的文件中。

@echo off
more +5

现在可以按这种方式使用此脚本。

dir C:\Windows | foo

它从第 6 行开始显示输出,一次显示一个屏幕(即作为分页器)。当前命令提示符一直处于阻塞状态,直到我退出 more.

现在我修改脚本如下,让更多的输出单独显示window。

@echo off
start "" more +5

现在,如果我 运行 下面的命令,一个新的 window 可以正常启动,但没有显示输出。

dir C:\Windows | foo

dir 命令的输出似乎没有被 start 命令接收。

我该怎么做才能确保通过管道传输到 start 命令的标准输入的任何数据都传递给 start 调用的程序(在 more 中这种情况)?

我认为不可能通过管道传输到另一个 window。您父 window 中的 START 命令正在接收管道输入。 START 命令忽略输入。您希望新 window 中的 MORE 命令接收输入。

我认为实现您的目标的唯一方法是使用临时文件:

@echo off
set "file=%temp%\%~nx0.temp"
findstr "^" >"%file%"
start "" cmd /c more +5 ^<"%file%" ^& del "%file%" ^& pause