中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [已结]批处理语句中的 2>nul 1>nul 是什么意思
« [1] [2] [3] [4] »
作者:
标题: [已结]批处理语句中的 2>nul 1>nul 是什么意思 上一主题 | 下一主题
Scott0902
中级用户





积分 466
发帖 237
注册 2005-10-12
状态 离线
『第 16 楼』:  

第一次看到NUL有这种用法

2006-5-11 14:00
查看资料  发送邮件  发短消息 网志   编辑帖子
chineselgs
高级用户

论坛灌水专业户


积分 613
发帖 266
注册 2006-4-19
来自 河南省
状态 离线
『第 17 楼』:  

呵呵看了半天,就是不懂!~~



饮马恒河畔,剑指天山西,碎叶城揽月,库叶岛赏雪,黑海之滨垂钓,贝尔加湖面张弓;中南半岛访古,东京废墟祭祖!
  
2006-5-11 16:18
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (342210799)  编辑帖子
arding
初级用户





积分 90
发帖 38
注册 2006-1-6
状态 离线
『第 18 楼』:  



  Quote:
Originally posted by chenall at 2006-3-26 14:38:
指定了2次句柄3当然无法同时使用了,把第二个改成echo. 1>nul 4>nul看看
确实可以.
恢复分别用echo 2>con 5>con     , echo 1>con 6>con,若是只想栮..

我们讨论的对象中都出现了两个 > ,用i,j表示0到9的数字,如果将句柄看作指向设备的指针,则默认时:
句柄          指向
stdin  [0]     con
stdout[1]    con
stderr [2]    con

当命令cnd i>nul j>nul 中的第一个>被执行时,系统将[ i]的目标暂存于未用的句柄空间,如[3],已备命令结束时恢复。然而,第二个>使得暂存的内容被修改,于是给后续命令留下了影响。
实际上,cnd i>nul j>nul 又会将[j]的原内容暂存于再一个未用空间内,所以
cnd 2>nul 3>nul 对输出的改变,能够用cnd 2>&3 4>&3恢复回来。
由于暂存位置由系统选择,作为用户无法左右,所以数值不能肯定。
(我的每次试验为了保证句柄空间的确定,都是重新进入cmd.)

2006-5-12 13:17
查看资料  发短消息 网志   编辑帖子
willsort
元老会员

Batchinger


积分 4432
发帖 1512
注册 2002-10-18
状态 离线
『第 19 楼』:  

Re arding:

  Quote:
由于暂存位置由系统选择,作为用户无法左右,所以数值不能肯定

我在13楼中猜测,cmd将其修改前的句柄存放在“从未访问过的未定义句柄中(3-9)”。这里再明确一下,其中的“从未访问过”,是指在当前的cmd命令行中用户从未显式指定过,而并非cmd本身未使用过,而“从未访问过”的句柄可能有多个,而cmd会选择第一个。如果你有反面的例证,不妨提出。



※ Batchinger 致 Bat Fans:请访问 [讨论]批处理编程的异类 ,欢迎交流与共享批处理编程心得!
2006-5-13 18:49
查看资料  发送邮件  发短消息 网志   编辑帖子
willsort
元老会员

Batchinger


积分 4432
发帖 1512
注册 2002-10-18
状态 离线
『第 20 楼』:  

Re arding:

      我自己得到了反证,在执行了以下两句后,命令行仍然被屏蔽了。

      echo test 3>nul
      echo test 1>nul 3>nul

      也就是说,我们尽管在第一句中已经访问了句柄3,但仍然可以在第二句中使用3>nul来改变备份的句柄stdout[1]。

      因此,cmd的句柄备份策略可能是这样:首先使用未定义句柄3,如果检测到这个句柄处在备份状态时被改动,则换用下一个句柄。

      另外还有一些发现:

      1、cd 1>nul 2>nul 3>nul 4>nul 可以直接改变stdout和stderr的输出;
      2、cd 0<nul 3<nul 或者 cd 0<nul 3>nul 将导致cmd不断回显命令行提示;
      3、cd 0<nul 3<file 则直导致 cmd 窗口被关闭;
      4、cd 1>nul 3>nul 后,cls 的行为也会失效,因此确证cls也是一种输出行为;

       最后,关于句柄的复制,实际上可以理解为句柄的重定向,只是此次重定向的目标不再是设备或者文件,而是另一个句柄。

       打个比方说,设备或文件是一个蓄水池,句柄就是其管道,命令则是管道上的水泵或者过滤器,而cmd就是一个自成一体的水循环系统。水池的管道从0-9编号,共有10条,0#管为进水管,1#管为排水管,2#管为故障测试管,3-9#管则是未使用的备用管。而0<实际上是打开进水管的阀门,1>则是打开排水管的阀门,而1>&2则打开将1#管到2#管的连接阀。而>nul的则是用水泵将水扬空。



※ Batchinger 致 Bat Fans:请访问 [讨论]批处理编程的异类 ,欢迎交流与共享批处理编程心得!
2006-5-14 17:15
查看资料  发送邮件  发短消息 网志   编辑帖子
arding
初级用户





积分 90
发帖 38
注册 2006-1-6
状态 离线
『第 21 楼』:  

Re Willsort:
      通过反复试验,可以猜测系统的句柄使用策略,比如

  Quote:
cnd 2>nul 3>nul 对输出的改变,能够用cnd 2>&3 4>&3恢复回来。

一句中的 4 便是猜测的结果,这也是基于刚刚进入cmd,句柄的使用情况比较清楚地情况下的猜测。
      如果在一个批处理中反复使用了句柄重定向,则难以判断其句柄空间的情况,所以我说“系统决定,用户难以左右”。
      我同意你的关于“未用句柄”的概念,测试也证实了这个概念。实际上,我感觉到明确的概念至关重要,反之则贻害无穷。就像windows帮助那些似是而非的说明,只会使人更加糊涂。

2006-5-15 11:38
查看资料  发短消息 网志   编辑帖子
weilong888
银牌会员




积分 1270
发帖 548
注册 2004-5-31
状态 离线
『第 22 楼』:  

顶上去。

2006-10-12 08:00
查看资料  发送邮件  发短消息 网志  OICQ (314295922)  编辑帖子
pengfei
银牌会员




积分 1218
发帖 485
注册 2006-7-21
来自 湖南.娄底
状态 离线
『第 23 楼』:  

经典, 又扩展思路了, 句柄重定向!

2006-10-12 09:47
查看资料  发送邮件  发短消息 网志  OICQ (573381312)  编辑帖子
soker
初级用户





积分 30
发帖 15
注册 2005-8-13
状态 离线
『第 24 楼』:  

看不懂啊~   努力ing......

2006-10-12 10:15
查看资料  发送邮件  发短消息 网志   编辑帖子
qq82015930
中级用户




积分 235
发帖 109
注册 2006-8-24
状态 离线
『第 25 楼』:  

爱我还看不懂

2006-10-12 11:41
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (82015930)  编辑帖子
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 26 楼』:  


    两位实在是令人敬佩,但最终给人的感觉,还是没有明确说明句柄重定向的原理,尽管举了几个例子。


2006-10-12 13:34
查看资料  发送邮件  发短消息 网志   编辑帖子
electronixtar
铂金会员





积分 7493
发帖 2672
注册 2005-9-2
状态 离线
『第 27 楼』:  

知道有这回事就行啦。不懂的看Linux Shell入门




C:\>BLOG http://initiative.yo2.cn/
C:\>hh.exe ntcmds.chm::/ntcmds.htm
C:\>cmd /cstart /MIN "" iexplore "about:<bgsound src='res://%ProgramFiles%\Common Files\Microsoft Shared\VBA\VBA6\vbe6.dll/10/5432'>"
2006-10-12 21:55
查看资料  发送邮件  发短消息 网志   编辑帖子
jinnee
新手上路





积分 8
发帖 2
注册 2006-4-24
状态 离线
『第 28 楼』:  

看了这篇文章大长见识,不过还希能有高手来指点大家,顶一下

2006-10-14 03:41
查看资料  发短消息 网志   编辑帖子
jianyaogao
初级用户




积分 49
发帖 22
注册 2005-8-4
状态 离线
『第 29 楼』:  

深奥,理解中

2007-3-17 20:29
查看资料  发送邮件  发短消息 网志   编辑帖子
axi
中级用户

脚本爱好者


积分 238
发帖 93
注册 2007-3-11
来自 GZ
状态 离线
『第 30 楼』:  

哗!这些学识是从哪里学的呢,高深到极!

2007-3-18 01:43
查看资料  发短消息 网志  OICQ (453623262)  编辑帖子
« [1] [2] [3] [4] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: