我的问题与管道在Windows批处理脚本(CMD)中的作用有关。
根据我目前的理解(可能是错误的),连续执行管道命令,并且将先前命令的标准输出(如果有)用作后续命令的标准输入。
如果前面的命令没有产生任何输出(因为它以非零错误级别退出,或者因为根本不应该产生任何输出),则没有任何内容传递给后续命令,并且其行为因此,取决于它是否需要任何输入才能正常工作。
如果后面的命令不需要任何标准输入(例如DIR
),但是前面的命令传递了一些标准输入,那么我希望它会被忽略。例如:
DIR | DIR
第一个DIR
的输出传递给第二个不需要的输出。因此,第二个DIR
只会忽略输入并执行应做的操作,即在控制台中打印当前文件夹的内容。
但是,如果我尝试:
DIR | SET x=5
然后什么也没有分配给变量x
,为什么? SET
命令不需要任何输入即可完成其工作。那么,为什么它不只是忽略来自DIR
的输入而从事其业务呢?
我的问题是:
SET
的这种行为? 如果可能的话,除了回答外,还请提供参考资料,以深入讨论这些主题。谢谢!