【发布时间】:2018-04-02 12:40:53
【问题描述】:
当使用 set /P 读取标准输入时,似乎从管道读取时它不起作用,而从重定向读取时它工作正常。这显示为以下几行:
D:\>echo 1 >f1
D:\>echo 2 >>f1
D:\>type f1
1
2
D:\>type f1 | (set line1=&set line2=&set /P line1=&set /P line2=&set line)
line1=1
line2=
D:\>(set line1=&set line2=&set /P line1=&set /P line2=&set line)<f1
line1=1
line2=2
D:\>
为什么在一种情况下读取 line2 而在另一种情况下不读取?
【问题讨论】:
-
这些场景的不同之处在于,在第一种情况下,整个文件内容被传递到管道,在完成第一个
set /p之后,流的其余部分被丢弃。在第二种情况下,仅关联第一行而不丢弃进一步的输入。请参阅this 以更好地了解 cmd 行/批处理解析器的内部工作原理 -
不同的问题,但same answer.
-
是的@MCND this answer 确实令人信服,并很好地解释了使用管道的不同行为。知道了这一点,接下来的问题就是如何在批处理文件中读取管道的输出?
-
这取决于具体情况、管道的来源、数据的大小,...。最简单的方法可能是使用
for /f处理输出读取管道的命令,类似于dir /b | for /f "delims=" %%a in ('find /v ""') do @( echo I see: %%a )
标签: batch-file cmd