【问题标题】:Batch - why does set /P behave differently with | and with <批处理 - 为什么 set /P 的行为与 | 不同?和 <
【发布时间】: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 )
  • 你可以找到一个纯批处理的方法here。可以找到混合方法here

标签: batch-file cmd


【解决方案1】:

最初由使用 MC ND 在 cmets 中发布。

发布与原样相同的答案,因此该问题不计入未回答,问题作者还在 cmets 中确认 MC ND 的答案是正确的并且它有所帮助。

我认为足够的背景,这里是作为答案的评论。

您可以找到纯批处理方法here。可以找到混合方法 hereMC ND Apr 2 at 22:03

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-18
    • 1970-01-01
    • 1970-01-01
    • 2017-02-06
    • 1970-01-01
    • 2019-03-07
    • 1970-01-01
    相关资源
    最近更新 更多