小编Bri*_*ian的帖子

在进程完成之前,Windows cmd.exe 中的管道不会转发标准输出?

考虑 Windows 命令外壳 cmd.exe 中的管道:

C:\>feed | filter
Run Code Online (Sandbox Code Playgroud)

馈送过程的标准输出似乎直到馈送过程运行完成后才能达到过滤过程的标准输入。

这种类型的“缓冲”可能会导致长时间运行的馈送过程的输出消息出现烦人的延迟(您可能希望在早期失败时按“ctrl-c”来中断它)。

有没有办法避免这种情况,以便一旦数据可用,馈送过程的标准输出就达到过滤过程的标准输入?(无缓冲)

例如,以下简化示例:

feed.bat:

@echo off
echo something
sleep 3
echo something else
Run Code Online (Sandbox Code Playgroud)

过滤器.bat:

@echo off
for /F "tokens=*" %%a in ('more') do (
    echo _%%a
)
Run Code Online (Sandbox Code Playgroud)

以下命令直到 3 秒后(睡眠完成时)才显示任何内容:

C:\>feed | filter
_something
_something else
Run Code Online (Sandbox Code Playgroud)

所需的行为是打印 '_something',然后延迟 3 秒,然后打印 '_something else'。

windows pipe batch-file delay buffered

4
推荐指数
1
解决办法
3922
查看次数

标签 统计

batch-file ×1

buffered ×1

delay ×1

pipe ×1

windows ×1