如何使 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
查看此脚本保存在名为 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