Batch file 批次-为什么set/P与|和<;的行为不同;

Batch file 批次-为什么set/P与|和<;的行为不同;,batch-file,cmd,Batch File,Cmd,当使用set/p读取stdin时,似乎从管道读取时它不工作,而从重定向读取时它工作正常。以下几行显示了这一点: 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 line

当使用set/p读取stdin时,似乎从管道读取时它不工作,而从重定向读取时它工作正常。以下几行显示了这一点:

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:\>
D:\>echo 1>f1
D:\>echo 2>>f1
D:\>f1型
1.
2.
D:\>键入f1 |(set line1=&set line2=&set/P line1=&set/P line2=&set line)
第1行=1
第2行=
D:\>(设置line1=&set line2=&set/P line1=&set/P line2=&set line)
为什么第2行在一种情况下阅读而在另一种情况下不阅读?

最初是在评论中使用的

发布与原样相同的答案,因此此问题不计入未回答问题,问题作者还在评论中确认,作者的答案是正确的,并且有帮助

我觉得有足够的背景,这里是评论作为答案


您可以找到一种纯粹的批处理方法。可在4月2日22:03找到混合进近


这些场景的区别在于,在第一种情况下,整个文件内容被传递到管道,在完成第一个
set/p
后,流的其余部分被丢弃。在第二种情况下,只关联第一行,而不丢弃进一步的输入。请参阅以更好地理解cmd line/batch parser的内部工作原理不同的问题,但是.Yes@MCND确实令人信服,并且很好地解释了使用管道的不同行为。知道了这一点,下一个问题将是如何读取批处理文件中管道的输出?这取决于具体情况、管道的来源、数据的大小等等。。。。最简单的方法是使用
for/f
处理读取管道的命令的输出,类似于
dir/b | for/f“delims=“%%a in('find/v”“))do@(echo我看到:%%a)
您可以找到一种纯批处理方法。可以找到一种混合方法