管道在Windows Batch脚本中的作用

时间:2018-10-04 13:26:35

标签: cmd

我的问题与管道在Windows批处理脚本(CMD)中的作用有关。

根据我目前的理解(可能是错误的),连续执行管道命令,并且将先前命令的标准输出(如果有)用作后续命令的标准输入。

如果前面的命令没有产生任何输出(因为它以非零错误级别退出,或者因为根本不应该产生任何输出),则没有任何内容传递给后续命令,并且其行为因此,取决于它是否需要任何输入才能正常工作。

如果后面的命令不需要任何标准输入(例如DIR),但是前面的命令传递了一些标准输入,那么我希望它会被忽略。例如:

DIR | DIR

第一个DIR的输出传递给第二个不需要的输出。因此,第二个DIR只会忽略输入并执行应做的操作,即在控制台中打印当前文件夹的内容。

但是,如果我尝试:

DIR | SET x=5

然后什么也没有分配给变量x,为什么? SET命令不需要任何输入即可完成其工作。那么,为什么它不只是忽略来自DIR的输入而从事其业务呢?

我的问题是:

  1. 我对管道逻辑的理解正确吗?
  2. 如果是,为什么我们观察到SET的这种行为?

如果可能的话,除了回答外,还请提供参考资料,以深入讨论这些主题。谢谢!

0 个答案:

没有答案