cmd – 为什么在重定向&0流时无法获取用户输入

例子:

set /p= 0>nul
runas /user:"" "" >nul 2>&1 0>con
comp nul nul 0>nul

执行命令就像按下了enter一样.当使用输入重定向但不输出时,我宁愿期待这样的事情.

最佳答案 让我们按照
MS documentacion.

我们处理重复

2>&1   : Take the handle in the stream 1, 
         duplicate it 
         and place the copy as the handle in stream 2.

和重定向运算符

2>file : Get a handle to the file and 
         place the handle to be used as stream 2

<file  : Get a handle to the file and
         place the handle to be used as stream 1 (implicit)

在所有情况下,获取(复制或不复制)句柄并将其放置为指示流的句柄.

现在你的代码

set /p= 0>nul
        ^^^^^ .... What does it mean? 

这意味着:打开一个流到nul“device”,并设置此流的句柄(复制/复制它)作为流0的句柄

所以,这两行是等价的(或多或少,见编辑)

set /p= <nul
set /p= 0>nul

在这两种情况下,存储在& 0中的句柄指向nul设备.

编辑以适应评论并完成答案.

Not then why set /p= 0<con and set /p= 0>con give different results?

也就是说,第一个从控制台读取,第二个从控制台读取.如果如前所述,在两种情况下,流& 0包含同一设备的句柄,这种行为的原因是什么?

处理未平仓期权.与& 0相关联的设备是相同的,但我们得到的手柄不是这种情况.至少如此说文件:

> >>生成一个只写句柄

所以,

>在第一种情况下,可以从手柄读取,因为控制台可以被重新加工,手柄允许读取
>在第二种情况下,控制台可以被重新加入,但是不能从句柄读取,因为它是一个写句柄

点赞