gpt4 book ai didi

batch-file - 为什么某些命令会处理已被其他命令使用的重定向 STDIN 数据行?

转载 作者:行者123 更新时间:2023-12-04 12:52:42 25 4
gpt4 key购买 nike

假设我们有以下带有文本文件 sample.txt 的代码片段重定向到 STDIN :

@echo off
< "sample.txt" (
set /P "ONE="
set /P "TWO="
findstr /R "^"
)
echo %ONE%, %TWO%

...以及相关文本文件的内容 sample.txt :
first
second
third
fourth

控制台上返回的输出将是这样的,这正是我所期望的(行 firstsecondset /P 消耗,因此 findstr 接收并处理剩余的行):

third
fourth
first, second


findstr /R "^" 时实现相同的输出被 sort /R 取代.

然而,当更换 findstr命令行来自 find /V ""或通过 more ,输出将是:

first
second
third
fourth
first, second


看来虽然 set /P已消耗线路 firstsecond最后的输出行 find 证明了这一点还有 more仍然接收整个重定向的数据。

为什么会这样,是什么导致了这种行为?有没有办法强制 findmore仅接收尚未被先前命令处理的剩余重定向数据?

(当将输出数据 STDOUT 重定向到文本文件时,行为是相同的。同样,当直接执行类似于上述 cmd 中的批处理代码的命令行时,没有任何变化。)

最佳答案

Why do some commands process lines of redirected STDIN data which are already consumed by other commands?



因为某些命令/程序会倒带 stdin。你可以试试这个:
@echo off
< "sample.txt" (
set /P "ONE="
set /P "TWO="
more +2
)
echo %ONE%, %TWO%

结果:
    third
fourth
first, second
more +2跳过文件的前两行。

关于batch-file - 为什么某些命令会处理已被其他命令使用的重定向 STDIN 数据行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37423428/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com