I've been learning batch scripting so I came across pipes and I
如果这个工作。
tasklist | find "winword"
find "winword" Why does this not: cd
cd | explorer
我希望这条命令能在当前工作目录下打开explorer,作为... cd
无任何参数的情况下,输出当前目录和:
explorer %directory%
打开资源管理器,在 %directory%
.
我这里是不是有什么地方做错了?
STDINfind "blah"
指向(按 Ctrl+Z 和 进入 结束提示)。) 然后输入 并按 进入;你会注意到这些文字 打印出来,所以有displayconsole输出;这是由 echo blah
STDOUT. 一根管子 将数据在 blah
STDOUT 并将其从左侧命令重定向至 STDIN|
为右边的命令。现在输入 命令提示符窗口,当然会弹出一个资源管理器窗口,但在命令提示符中会发生什么呢? 对,什么都没有,它不等待任何输入。STDIN. 所以,你可以管它,但它不会关心,因为它不读在
STDINexplorer
. 事实上,GUI应用程序一般不会使用 STDIN 和 STDOUT因为这些东西是为命令行应用程序准备的。还有一个例子:在命令提示符窗口中,输入 ;很明显会发生什么;然后输入 ; 会发生什么? 返回
当前echo C:\Windows
目录,但不属于 echo C:\Windows| dir
. 为什么?dir
先看看情况:是的。 显示了当前目录的内容,而且它还能做到 不C:\Windows
等待控制台的输入;所以在管道的右侧,它在接收数据时,在 dir
STDINdir
但它根本不在乎。你可以尝试使用 没有管子和有管子,输出的效果是一样的。STDIN 这里忽略了。的 dir "C:\some\other\folder"
这个例子也展示了控制台输入(STDIN
)和命令行参数:命令行中的路径。echo
就是这样一个论点,你不能用来自于 dir
STDIN. 要了解原因,你需要区分以下几点 解析时间dir "C:\some\other\folder"
(当命令被解释器读取和解析时)和 运行时间 (当命令实际执行时):参数在解析时已经存在,而 STDIN 只有在 运行时间,这是后话。所以我们可以说他们只是从未见过面。这也反映了你的尝试的情况 : 后者接受命令行参数(无论如何都需要有可用的参数) 之前 执行,所以在解析时),但它并不关心
STDINcd | explorer
. 还 STDOUT 数据来自 在执行前是不可用的(但只有在运行时才可以用),所以无论如何都会太晚到达。