[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
回复 30# CrLf


    代码运行至此后,其实sdtout已经差不多恢复功能了,否则连前的的prompt 信息也不会显示,除了sdtin接收输入的字符能被显示出来,标准输出都不会显示,显然这里还可以继续显示其它信息的。
1

评分人数

    • CrLf: 你是对的技术 + 1

TOP

amwfjhh推测的挺有道理
一个简单的测试
cls > con
在DOS下执行清屏
在CMD下输出字符
这说明cmd仿真出来的con
并不是原始的控制台设备
对屏幕缓冲区的处理没有做到完全仿真
也就是在cmd下con设备更加的“字符化”了

类似的现象还有
dir | more > con
天的白色影子

TOP

有趣,新发现

TOP

RE: 重定向中的秘密(句柄备份) [修改]

TOP

绕晕了,大概理解了句柄备份和复原
我就是我,不一样的烟火!

TOP

0 是 stdin
1 是 stdout
2 是 stderr
写的很清楚,谢谢~

TOP

学习学习,看看是什么

TOP

看了多次,好像有点明白的样子,但不清爽。不知如何使用,应用的例子太少,再来一遍吧,第5遍了。俗话说书读五遍,其义自见。

TOP

关于两句应用的个人理解:
应用
1,一次性屏蔽错误输出(加在开始屏蔽的语句后面)
2>nul 3>nul

                         1con 2con 3空
2>nul                1con 2nul 3con
3>nul                1con 2nul 3nul 4con
取回2找3,3找4     1con 2nul 3con

2,一次性将输出写入文件 a.txt(不包括错误反馈,用法同上)
>&3 3>a.txt

                        1con 2con 3空
>&3即1>&3       1con 2con 3con
3>a.txt             1con 2con 3a.txt 4con
取回1找3,3找4    1a.txt 2con 3con 4空

TOP

正常情况:
  1. abc
复制代码
输出如下:
  1. 'abc' 不是内部或外部命令,也不是可运行的程序
  2. 或批处理文件。
复制代码
当使用句柄复制:
  1. abc 3>nul 2>&3
复制代码
此时控制台没有输入错误
所以我推测,2>&3,先从 句柄3中取到3的指向(输出设备)。然后让句柄2 也指向 句柄3的指向,即句柄2 此时的输出设备也变为nul.

TOP

至于 <& ,
正常输入是这样的
  1. set /p name=输入
复制代码
控制台敲完指令后,我们输入haoren,然后再输入命令
  1. echo %name%
复制代码
控制台会显示haoren
使用 <& 是这样的
  1. set /p p=输入 3<a.txt 0<&3
复制代码
此时 控制台并不需要我们输入,我们接着敲命令
  1. echo %p%
复制代码
控制台显示的是a.txt中的第一行的内容。
由此对0<&3我们可以理解为:0句柄默认的输入设备是控制台,0<&3之后,将句柄3中的输入设备 给 句柄0. 而句柄3的输入设备我们提前设置为a.txt,所以 句柄0的输入设备就是a.txt了。

TOP

总结如下:
1>a.txt   将句柄1的输出设备变为a.txt,之前输入到控制台的内容会写入到a.txt
0<a.txt   将句柄0的输出设备变为a.txt,之前需要从控制台输入内容,现在直接将a.txt中的第一行作为输入的内容
1>&3     将句柄3的输出设备作为句柄1的输出设备(&3,取到句柄3的输出设备。 如3>a.txt  1>&3  可以理解成1>a.txt)
0<&3    将句柄3的输入设备作为句柄1的输入设备(&3,取到句柄3的输入设备。 如3<a.txt  0<&3  可以理解成0<a.txt)

TOP

返回列表