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

re:楼主

很高兴还有人对我那篇又臭又长的文章感兴趣。

我们这里提到的数据流(包括标准输出流、标准输入流、标准错误流)由句柄stdout、stdin、stderr代替,而这三个句柄又由三个句柄号码代替,即1、0、2。也就是说1代表标准输出流、0代表标准输入流、2代表标准错误流。3~9没有指代任何数据流(视为“空流”)。所谓重定向,就是把数据流从默认位置重定向到指定位置,而3~9仅仅是保存指向的间接量(因为它们里面根本不会有数据流)。

“空指向”是否也会被“备份”这点我觉得没必要讨论,因为效果都是一样的。

我要说的重点是——除了3~9意外其实还有两个额外的“空间”来存储“指向”,这样就可以在占满的情况下备份8和9的指向。

[ 本帖最后由 xzyx 于 2008-11-19 12:29 编辑 ]

TOP

>nul 3>nul 4>nul

>nul 4>nul 5>nul
明显不一样,但与“空指向” 备不备份没有直接关系。

我举个例子
@echo off
echo hero >nul 4>nul 5>nul
echo yeah 1>&4
pause
这里会出现句柄复制的错误,即4是空指向。如果空指向也备份的话,那么4应该到5中找指向,这样4就应该有指向。因此“空指向” 不备份。

TOP

例四应该这样解释:
第一步:系统发现1的指向要改变,因此将其指向con备份到3中,此时3的指向就是con。
第二步:系统发现<&符号,这样就把3的指向复制给1,由于3的指向是con,故1的指向仍为con。
第三步:3>nul,系统发现3的指向要改变,因此将3的指向备份到4然后把3指向nul,这样3就指向nul、4指向con。
第四步:上面的语句结束之后系统要恢复这些句柄代码的指向,1找3,3找4,结果是1指向nul、3指向con。

TOP

回复 16楼 的帖子

没发现有什么不同。
这样吧,帮我用你的方法解释一下这句
1>&3 3>nul

[ 本帖最后由 xzyx 于 2008-11-19 15:48 编辑 ]

TOP

返回列表