中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-07-23 06:27
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [已解决]请教如何将命令的输出既显示又输出到log文件中? 查看 878 回复 8
楼 主 [已解决]请教如何将命令的输出既显示又输出到log文件中? 发表于 2008-11-29 11:57 ·  中国 北京 鹏博士BGP
中级用户
★★
积分 273
发帖 91
注册 2007-05-07 18:12
19年会员
UID 87770
性别 男
状态 离线
比如我想使用hhc.exe生成chm文件.
hhc.exe xxx.hhp
则此编译过程会显示在cmd窗口中.

如果使用
hhc.exe xxx.hhp > log.txt
则不会在屏幕上显示,直接输出到log.txt

请问能不能让输出的信息既显示在cmd窗口中,也输出到log.txt?

(已经搜索过论坛,但是没有找到可以解决这个问题的文章.)

[ Last edited by sonicandy on 2008-11-29 at 15:01 ]
2 发表于 2008-11-29 15:00 ·  中国 北京 鹏博士BGP
中级用户
★★
积分 273
发帖 91
注册 2007-05-07 18:12
19年会员
UID 87770
性别 男
状态 离线
猛然想起VBS可以实现这功能,已经解决了,呵呵.

调用:
dir |cscript //nologo savelog.vbs log.txt


Set fso = CreateObject("scripting.filesystemobject")
Set stream = fso.opentextfile(wscript.arguments(0),2,true)
While Not wscript.stdin.atendofstream
line = wscript.stdin.readline
wscript.stdout.writeline(line)
Call stream.writeline(line)
Wend
Call stream.close
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
wxcute +4 2008-11-29 17:11
3 发表于 2008-11-29 17:10 ·  中国 重庆 电信
版主
★★★★★
积分 9,023
发帖 5,017
注册 2007-05-31 19:39
19年会员
UID 89899
性别 男
状态 离线
@echo off
dir>log.txt
type log.txt
pause
4 发表于 2008-11-29 17:47 ·  中国 湖北 武汉 联通
版主
★★★★★
积分 11,386
发帖 4,938
注册 2006-07-23 17:10
19年会员
UID 59080
状态 离线
有个命令行工具 tee 。
5 发表于 2008-11-29 20:26 ·  中国 北京 鹏博士长城宽带
银牌会员
★★★★
[b]看你妹啊[/b]
积分 1,488
发帖 1,357
注册 2006-05-20 12:00
20年会员
UID 55770
状态 离线
好像 MTEE更加强大
更好用

有问题请发论坛或者自行搜索,再短消息问我的统统是SB
6 发表于 2008-11-29 23:16 ·  中国 北京 鹏博士BGP
中级用户
★★
积分 273
发帖 91
注册 2007-05-07 18:12
19年会员
UID 87770
性别 男
状态 离线
刚才实现了chm的生成代码,这回不用调用命令行了,直接在vbs的内部就可以完成.
vbs的wshshell提供了一个wshscriptexec对象:
http://www.elook.net.cn/handbook/windowsscript/html/wslrfscriptexecobject.htm

这个对象是通过wshell.exec得到的,以下是我实现的部分代码:
' 调用'hhc.exe'生成chm并保存输出到log文件
Sub GenChm()
Dim stream
Set stream = fso.opentextfile(logfile,2,true)

Dim oexec
Set oexec = shell.Exec(cmdline)

Do While Not oExec.StdOut.AtEndOfStream
Dim line
line = oexec.stdout.readline()

Call wscript.stdout.writeline(line)
Call stream.writeline(line)
Loop

Call stream.close
End Sub


当然,为了让wscript的标准输入输出句柄有效,必须使用cscript宿主来运行:-)

[ Last edited by sonicandy on 2008-11-29 at 23:21 ]
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
HAT +2 2008-11-30 11:32
7 发表于 2008-11-29 23:26 ·  中国 北京 鹏博士BGP
中级用户
★★
积分 273
发帖 91
注册 2007-05-07 18:12
19年会员
UID 87770
性别 男
状态 离线
Originally posted by HAT at 2008-11-29 05:10 PM:
@echo off
dir>log.txt
type log.txt
pause


这个貌似是命令执行完了以后才显示的,这样就没有即时显示的效果了.
当然如果命令运行时间不长的话可以使用这个方式:->
8 发表于 2008-11-29 23:30 ·  中国 北京 鹏博士BGP
中级用户
★★
积分 273
发帖 91
注册 2007-05-07 18:12
19年会员
UID 87770
性别 男
状态 离线
4版主和5楼朋友说的工具我还没有用过..
不知道实现的是不是相同的功能?
如果是的话,还是直接写个脚本方便,呵呵

[ Last edited by sonicandy on 2008-11-29 at 23:32 ]
9 发表于 2008-11-30 00:55 ·  中国 湖北 武汉 联通
版主
★★★★★
积分 11,386
发帖 4,938
注册 2006-07-23 17:10
19年会员
UID 59080
状态 离线
mtee 还不错,不仅可以在每行输出前面添加时间日期,还可以把输出追加到任意多个文件。http://www.commandline.co.uk/mtee/mtee.zip
论坛跳转: