中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-08-02 04:39
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 请高手解释一下关于句柄输出的问题 查看 2,026 回复 7
楼 主 请高手解释一下关于句柄输出的问题 发表于 2006-10-03 05:52 ·  中国 北京 教育网
初级用户
积分 68
发帖 15
注册 2005-11-23 16:57
20年会员
UID 45794
状态 离线
>&,将一个句柄的输出写入到另一个句柄的输入中。
<&,刚好和>&相反,从一个句柄读取输入并将其写入到另一个句柄输出中。
这个我不是很明白怎么用能给解释一下吗?
来个列子吧?


──────────────── 版务记录 ────────────────
执行:namejm
原标题:请高手给解释一下?
现标题:请高手解释一下关于句柄输出的问题
说明:因原标题过于模糊,不便于论坛的搜索和管理,在本提示发表三日之后,
  楼主尚未更改标题,现由本人强制修改标题,并扣除楼主4点积分。
──────────────── 版务记录 ────────────────


[ Last edited by namejm on 2006-10-19 at 01:12 ]
本帖最近评分记录 (共 2 条) 点击查看详情
评分人分数时间
namejm -4 2006-10-19 01:12
kootoo +2 2007-12-27 22:29
2 发表于 2006-10-03 06:27 ·  中国 广东 广州 教育网
铂金会员
★★★★
C++启程者
积分 5,154
发帖 1,827
注册 2003-07-18 00:00
23年会员
UID 7105
性别 男
状态 离线
是> 不是 >&吧?

ECHO HELLO > FILE.TXT
把HELLO存到文件

DEBUG < DEBUGBAT.BAT (DEBUG代码)
运行DEBUG脚本

DEBUG < DEBUGIN.BAT > DEBUGOUT.TXT
运行DEBUG脚本,并把输出结果存到文件

还有管道符号 |,把前面的输出作为后面的输入

ECHO Y | DEL *.*
用Y字符作为DEL *.* 的 询问的应答

[ Last edited by GOTOmsdos on 2006-10-3 at 06:29 ]
3 发表于 2006-10-03 06:41 ·  中国 四川 南充 电信
超级版主
★★★★
我爱DOS
积分 5,310
发帖 2,044
注册 2005-09-26 12:00
20年会员
UID 42843
性别 男
来自 四川南充
状态 离线
ECHO HELLO > FILE.TXT会把HELLO和一个空格存到文件
要不把最后的空格存到文件就应该是ECHO HELLO> FILE.TXT
4 发表于 2006-10-03 07:14 ·  中国 湖南 娄底 新化县 电信
银牌会员
★★★
积分 1,218
发帖 485
注册 2006-07-21 21:24
20年会员
UID 58987
来自 湖南.娄底
状态 离线
举个例子, 如:命令正确执行就是句柄1, 命令执行不成功就是句柄2.


请先运行这一段代码试试:
@echo off
dir /b ???.txt>file.txt
pause

运行后cmd窗口显示找不到文件. file.txt文件为空.

这说明命令正确执行返回的数据将重定向到file.txt中(也就是句柄1), 因为找不到文件句柄1也没有数据写入文本.

而执行不成功将显示错误信息, 也就是找不到文件(为句柄2)


这一段是句柄2的复制到句柄1.

运行后cmd窗口没有任何信息显示, 而找不到文件的提示会写入到file.txt中. 很显然句柄2被复制到句柄1中写入file.txt中.

@echo off
dir /b ???.txt>file.txt 2>&1
pause



我也不知道分析得对不对, 期待高手出来解惑...
5 发表于 2006-10-03 07:26 ·  中国 湖南 娄底 新化县 电信
银牌会员
★★★
积分 1,218
发帖 485
注册 2006-07-21 21:24
20年会员
UID 58987
来自 湖南.娄底
状态 离线

@echo off
echo.>mu.txt
dir /b mu.txt>file.txt
pause

运行这一段代码的结果是, 找到mu.txt(句柄1)写入到file.txt中. cmd窗口没有显示错误信息(句柄2). 因为是正常执行, 所以句柄1为mu.txt, 而句柄2为空.




运行这一段前请将file.txt删除.

@echo off
echo.>mu.txt
dir /b mu.txt>file.txt 1>&2
pause

运行结果是没有生成file.txt, 而是在cmd窗口显示mu.txt. 因为1>&2这一句将句柄1重定向到句柄2中, 也就是句柄1没有重定向到file.txt中, 而是显示在cmd窗口中.

6 发表于 2006-10-03 08:18 ·  中国 广东 广州 教育网
铂金会员
★★★★
C++启程者
积分 5,154
发帖 1,827
注册 2003-07-18 00:00
23年会员
UID 7105
性别 男
状态 离线
其实 ECHO HELLO> FILE.TXT 后
FILE.TXT里面仍然多个回车和换行的。。
共7个字节,而不是5个
7 发表于 2006-10-03 08:22 ·  中国 湖南 娄底 新化县 电信
银牌会员
★★★
积分 1,218
发帖 485
注册 2006-07-21 21:24
20年会员
UID 58987
来自 湖南.娄底
状态 离线
呵呵~ 是多了个回车符, 2个字节.

@echo off
dir /b yyyyy.txt 1>1.txt 2>2.txt
pause

这一段句柄1重定向到1.txt为零字节. 句柄2为找不到文件.

[ Last edited by pengfei on 2006-10-3 at 08:33 ]
8 发表于 2006-10-03 08:54 ·  中国 北京 教育网
初级用户
积分 68
发帖 15
注册 2005-11-23 16:57
20年会员
UID 45794
状态 离线
还有一个我不是很明白的就%1 %%i 这两个%是什么意思?
论坛跳转: