![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-09-15 12:47 |
共 47,812 主题排行 / 349,917 发帖 / 今日 0 篇 / 48,268 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » [已结]批处理语句中的 2>nul 1>nul 是什么意思 |
| 可打印版本 31,415 / 57 |
| 第16楼 Scott0902 | 发表于 2006-05-11 14:00 |
| 中级用户 发帖 237 积分 466 | |
|
第一次看到NUL有这种用法
|
|
| 第17楼 chineselgs | 发表于 2006-05-11 16:18 |
| 高级用户 发帖 266 积分 613 来自 河南省 | |
|
呵呵看了半天,就是不懂!~~
|
|
| 第18楼 arding | 发表于 2006-05-12 13:17 |
| 初级用户 发帖 38 积分 90 | |
Originally posted by chenall at 2006-3-26 14:38: 我们讨论的对象中都出现了两个 > ,用i,j表示0到9的数字,如果将句柄看作指向设备的指针,则默认时: 句柄 指向 stdin con stdout con stderr con 当命令cnd i>nul j>nul 中的第一个>被执行时,系统将的目标暂存于未用的句柄空间,如,已备命令结束时恢复。然而,第二个>使得暂存的内容被修改,于是给后续命令留下了影响。 实际上,cnd i>nul j>nul 又会将的原内容暂存于再一个未用空间内,所以 cnd 2>nul 3>nul 对输出的改变,能够用cnd 2>&3 4>&3恢复回来。 由于暂存位置由系统选择,作为用户无法左右,所以数值不能肯定。 (我的每次试验为了保证句柄空间的确定,都是重新进入cmd.) |
|
| 第19楼 willsort | 发表于 2006-05-13 18:49 |
| 元老会员 发帖 1,512 积分 4,432 | |
|
Re arding:
由于暂存位置由系统选择,作为用户无法左右,所以数值不能肯定 我在13楼中猜测,cmd将其修改前的句柄存放在“从未访问过的未定义句柄中(3-9)”。这里再明确一下,其中的“从未访问过”,是指在当前的cmd命令行中用户从未显式指定过,而并非cmd本身未使用过,而“从未访问过”的句柄可能有多个,而cmd会选择第一个。如果你有反面的例证,不妨提出。 |
|
| 第20楼 willsort | 发表于 2006-05-14 17:15 |
| 元老会员 发帖 1,512 积分 4,432 | |
|
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的则是用水泵将水扬空。 |
|
| 第21楼 arding | 发表于 2006-05-15 11:38 |
| 初级用户 发帖 38 积分 90 | |
|
Re Willsort:
通过反复试验,可以猜测系统的句柄使用策略,比如 cnd 2>nul 3>nul 对输出的改变,能够用cnd 2>&3 4>&3恢复回来。一句中的 4 便是猜测的结果,这也是基于刚刚进入cmd,句柄的使用情况比较清楚地情况下的猜测。 如果在一个批处理中反复使用了句柄重定向,则难以判断其句柄空间的情况,所以我说“系统决定,用户难以左右”。 我同意你的关于“未用句柄”的概念,测试也证实了这个概念。实际上,我感觉到明确的概念至关重要,反之则贻害无穷。就像windows帮助那些似是而非的说明,只会使人更加糊涂。 |
|
| 第22楼 weilong888 | 发表于 2006-10-12 08:00 |
| 银牌会员 发帖 548 积分 1,270 | |
|
顶上去。
|
|
| 第23楼 pengfei | 发表于 2006-10-12 09:47 |
| 银牌会员 发帖 485 积分 1,218 来自 湖南.娄底 | |
|
经典, 又扩展思路了, 句柄重定向!
|
|
| 第24楼 soker | 发表于 2006-10-12 10:15 |
| 初级用户 发帖 15 积分 30 | |
|
看不懂啊~ 努力ing......
|
|
| 第25楼 qq82015930 | 发表于 2006-10-12 11:41 |
| 中级用户 发帖 109 积分 235 | |
|
爱我还看不懂
|
|
| 第26楼 lxmxn | 发表于 2006-10-12 13:34 |
| 版主 发帖 4,938 积分 11,386 | |
|
两位实在是令人敬佩,但最终给人的感觉,还是没有明确说明句柄重定向的原理,尽管举了几个例子。 |
|
| 第27楼 electronixtar | 发表于 2006-10-12 21:55 |
| 铂金会员 发帖 2,672 积分 7,493 | |
|
知道有这回事就行啦。不懂的看Linux Shell入门
|
|
| 第28楼 jinnee | 发表于 2006-10-14 03:41 |
| 新手上路 发帖 2 积分 8 | |
|
看了这篇文章大长见识,不过还希能有高手来指点大家,顶一下
|
|
| 第29楼 jianyaogao | 发表于 2007-03-17 20:29 |
| 初级用户 发帖 22 积分 49 | |
|
深奥,理解中
|
|
| 第30楼 axi | 发表于 2007-03-18 01:43 |
| 中级用户 发帖 93 积分 238 来自 GZ | |
|
哗!这些学识是从哪里学的呢,高深到极!
|
|
| 上一页 1 2 3 4 下一页 |
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |