中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [已解决]请教如何将命令的输出既显示又输出到log文件中?
作者:
标题: [已解决]请教如何将命令的输出既显示又输出到log文件中? 上一主题 | 下一主题
sonicandy
中级用户





积分 273
发帖 91
注册 2007-5-7
状态 离线
『楼 主』:  [已解决]请教如何将命令的输出既显示又输出到log文件中?

比如我想使用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 ]

2008-11-29 11:57
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
sonicandy
中级用户





积分 273
发帖 91
注册 2007-5-7
状态 离线
『第 2 楼』:  

猛然想起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


   此帖被 +4 点积分        点击查看详情   
评分人:【 wxcute 分数: +4  时间:2008-11-29 17:11


2008-11-29 15:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 3 楼』:  


@echo off
dir>log.txt
type log.txt
pause




2008-11-29 17:10
查看资料  发短消息 网志   编辑帖子  回复  引用回复
lxmxn
版主




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

有个命令行工具 tee 。

2008-11-29 17:47
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
yishanju
银牌会员

[b]看你妹啊[/b]


积分 1488
发帖 1357
注册 2006-5-20
状态 离线
『第 5 楼』:  

好像 MTEE更加强大
更好用




有问题请发论坛或者自行搜索,再短消息问我的统统是SB
2008-11-29 20:26
查看资料  发短消息 网志   编辑帖子  回复  引用回复
sonicandy
中级用户





积分 273
发帖 91
注册 2007-5-7
状态 离线
『第 6 楼』:  

刚才实现了chm的生成代码,这回不用调用命令行了,直接在vbs的内部就可以完成.
vbs的wshshell提供了一个wshscriptexec对象:
http://www.elook.net.cn/handbook ... criptexecobject.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 ]

   此帖被 +2 点积分    点击查看详情   
评分人:【 HAT 分数: +2  时间:2008-11-30 11:32


2008-11-29 23:16
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
sonicandy
中级用户





积分 273
发帖 91
注册 2007-5-7
状态 离线
『第 7 楼』:  



  Quote:
Originally posted by HAT at 2008-11-29 05:10 PM:
@echo off
dir>log.txt
type log.txt
pause

这个貌似是命令执行完了以后才显示的,这样就没有即时显示的效果了.
当然如果命令运行时间不长的话可以使用这个方式:->

2008-11-29 23:26
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
sonicandy
中级用户





积分 273
发帖 91
注册 2007-5-7
状态 离线
『第 8 楼』:  

4版主和5楼朋友说的工具我还没有用过..
不知道实现的是不是相同的功能?
如果是的话,还是直接写个脚本方便,呵呵

[ Last edited by sonicandy on 2008-11-29 at 23:32 ]

2008-11-29 23:30
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lxmxn
版主




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

mtee 还不错,不仅可以在每行输出前面添加时间日期,还可以把输出追加到任意多个文件。http://www.commandline.co.uk/mtee/mtee.zip

2008-11-30 00:55
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


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



论坛跳转: