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

回复 12楼 的帖子

英雄兄也来看阿。多谢多谢

现在觉得我的也很容易把人绕晕。(叹口气)

占满部分倒是没研究透。有空看看。

“空指向” 备不备份是有区别的

>nul 3>nul 4>nul

>nul 4>nul 5>nul
是不一样的,虽然没什么用处

TOP

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

回复 10楼 的帖子

谢谢你的提醒,确实是忘了写应用部分了,马上补上。

TOP

楼主的研究精神真是可赞可佩,“英雄”的这片教程我也是看的一头雾水,通常我只是在要用时才研究研究。。。汗。。。
技术问题请到论坛发帖求助!

TOP

回复 7楼 的帖子

我手头也没什么资料,全靠反推。

过程大致如下:
先研究这些单个的输出现象
echo a>nul
echo a 2>nul
echo a 3>nul
echo a 4>nul
echo a 5>nul
echo a 6>nul
echo a 7>nul
echo a 8>nul
echo a 9>nul
echo a>nul 2>nul
echo a>nul 3>nul
echo a>nul 4>nul
echo a>nul 5>nul
……
再组合起来看有什么表现

懂得部分后用以下的来检查看不到效果的句柄。
echo a 1<&a
echo a 1<&9
echo a 1<&8
echo a 1<&7
echo a 1<&6
echo a 1<&5
echo a 1<&4
echo a 1<&3
echo a 1<&2
echo a 1<&1
echo a 1<&0

总之是一点点的推,有些认为肯定是对的了后就作个假设并拿来验证其他的;
但有时这种假设是错的,就要推翻重新假设。
一步步推到没错后就得出来。

TOP

问个题外话,这些设备问题都是怎样去研究其原理的?

TOP

回复 上面,差不多

指向 部分,有说明 0-9 这10 个句柄的默认指向。
指向
句柄实际上也是一组 0 1 数据,是存储了一个指向。
句柄 0 默认指向 con,这里 con 为标准输入设备,即键盘。
句柄 1 默认指向 con,这里 con 为标准输出设备,即控制台。
句柄 2 默认也指向 con,同 1。
此外,我们对句柄的指向重新设定(即所谓的重定向)时,可以改变句柄的指向。
如 1>nul 是让“标准输出”数据输出到空设备,效果就是屏蔽输出。
特别之处: 3 - 9 默认是没有指向的,我们可以用(空)来表示,注意是不同于空设备 nul 的哦!

[ 本帖最后由 wxcute 于 2008-11-18 20:15 编辑 ]

TOP

ok,原理就是将1的备份到3中,如果3不为空,就向后推移?

TOP

回复 3楼 的帖子

不是
状态 A:
1nul 3con(4 之后都没有指向)
echo 我现身>con
┏>con
┗1con(3con)4nul    设定句柄 1 指向为 con,先备份句柄 1 的原指向(状态 A 的指向)nul 到句柄 4;
执行→1con(3con)4nul  句柄 4 指向是由(空)变成 nul,因此不备份。
   ┌────────┘
←取回1nul(3con)    句柄 1 取回其在 4 的备份 nul;
             句柄 4 因为没备份,因此恢复到默认的无指向状态。

句柄 3 因为在 >con >nul 这句中设定了,返回后成为状态 A:1 nul 3con;到这儿 3 已经不是(空)了
所以 >con 备份时就没 3 什么事儿了,直接备份到 4。

=======================================
请看句柄备份理论第一句
当指向为非空的句柄被重新设置时要进行备份,而且是备份到第一个没有指向的句柄。

[ 本帖最后由 wxcute 于 2008-11-18 20:05 编辑 ]

TOP

“我现身,”这句设定为“>con”。执行时 1 为 con,原来的 nul 备份到 4(因为前面 3 已经为 con 不是没有指向了);执行完后 1 取回备份 nul,4 恢复(空)。这时的状态还是 A。

-----------------------------------------
回复:兄的意思是将1原来的nul备份到3,然后将3的con备份到4吧?
最后结束再依次取回?

TOP

占个沙发先,谢谢LZ的分享!

TOP

返回列表