当重定向& 0流时,为什么我无法获得用户输入

时间:2015-02-15 23:52:41

标签: cmd batch-file

示例:

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

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

1 个答案:

答案 0 :(得分:2)

让我们关注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&#34;设备&#34;,并设置此流的句柄(复制/复制它)作为流0的句柄

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

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

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

已修改以适应评论并完成答案。

  

不是为什么set /p= 0<conset /p= 0>con会给出不同的结果?

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

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

  • <生成只读句柄
  • >生成只写句柄

所以,

  • 在第一种情况下,可以从手柄读取,因为控制台可以被加入,手柄可以读取
  • 在第二种情况下,控制台可以被重新启动但是无法从句柄中读取,因为它是一个写句柄