中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
作者:
标题: 输出到屏幕,怎么做? 上一主题 | 下一主题
THEO995
新手上路





积分 6
发帖 2
注册 2007-1-31
状态 离线
『楼 主』:  输出到屏幕,怎么做?

我写了一个BAT文件 。。输出到文件的同时。。屏幕也能显示出来。。请问如何做、?

2007-1-31 06:20
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
electronixtar
铂金会员





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

论坛搜索 tee.com




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'>"
2007-1-31 06:31
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
THEO995
新手上路





积分 6
发帖 2
注册 2007-1-31
状态 离线
『第 3 楼』:  

没有找到。。。  dir >tt.txt 的同时屏幕显示。。如何做?

2007-1-31 06:43
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
vkill
金牌会员





积分 4103
发帖 1744
注册 2006-1-20
来自 甘肃.临泽
状态 离线
『第 4 楼』:  

变通 >后type

2007-1-31 06:49
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
electronixtar
铂金会员





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

看来都不会搜索啊

http://www.cn-dos.net/forum/view ... ght=tee.&page=2


willsort
金牌会员

Batchinger



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




  Quote:
Originally posted by 3742668 at 2006-8-5 18:45:
知识面有多大,脚本的功能就有多大。



Re acoreq:

      诚然!我们选择解决问题的方法,取决于我们如何理解问题本身。

      在你的应用中,使用&或者不使用&分别执行两次命令将输出分别重定向,可能是最简单的方案,不管它有多么繁琐,它至少简单,而简单与简洁并不等同。
========================================

      但可能你会遇到一些预期的问题,比如某些命令第一次执行与第二次执行的输出往往并不相同,比如 echo.%time% ,此时分两次执行将得到不同的结果,他们被分别重定向了到文件和控制台上。

      这并不是我们想要的结果,所以我们需要改进。最先能想到的,我们可以将所有的命令输出首先重定向到文件,然后在最护 type 这个文件到控制台上。这似乎是个不错的方案,至少它解决了第一个问题,而且也足够简单。

dir > cmd.log
cd >> cmd.log
...
type cmd.log
========================================

      但仍然有新的问题,比如在很多时候,我们希望在执行了某些命令后,能够立即查看它的输出,我们可以此时就 type 这个文件,但如果以后有新的命令输出需要重定向,我们就面临两难:如果在查看完旧的命令日志后删除它,则日志文件将缺少前面的命令输出;而如果不删除,继续用>>添加新的内容,则在随后的 type 时,前面的命令输出将再次输出到屏幕上。

      因此改进需要继续,或许将命令日志由一个拆成多个是个办法——每个命令都有单独的命令日志,它们可以独立的重定向并且输出,而不会相互掣肘。最后,如果我们想得到一个完整的日志文件,只需要用 copy 简单的合并一下即可。这个方案仍然足够简单,而且可以解决目前面临的问题, 除非有新的问题。

dir > _dir.log
type _dir.log
cd > _cd.log
type _cd.log
...
copy _*.log cmd.log >nul
del _*.log
========================================

      不过,如果你自命是一个很爱钻研(较真的同义词)的批处理设计者,因此对以上的方案都抱有某种不满(比如第三方案中的临时日志文件),我们就需要寻找更合适的方案。

      首先,我会想到一个名为 tee (很古怪的名字)的 Unix 工具,它是将标准输出的文本输出到控制台的同时输出到文件中(其中未涉及重定向的概念,但本质上是类似的机制)的标准工具,我们可以很轻易的获得这个工具的DOS或者Windows移植版[1]。

      它的用法很简单,在[2]中曾有提及

dir | tee cmd.log
cd | tee --append cmd.log
========================================

      但如果“较真的你”对第三方工具比较抵触,或者有无法使用的苦衷(比如如如何保持跨平台的兼容性),那么继续寻找新的方案。

      很快你就会发现William Allen的vbs脚本[3],这一个tee.exe的第一方实现,也就是说我们用vbs脚本完成了类似tee的功能。

  Set StdIn = WScript.StdIn
  Set StdOut = WScript.StdOut
  Set Args=WScript.Arguments
  LogFile=Args(0)
  Set fso = CreateObject("Scripting.FileSystemObject")
  Set LogFile= fso.CreateTextFile(Args(0))

  Do While Not StdIn.AtEndOfStream
       str = StdIn.ReadLine
       StdOut.WriteLine str
       LogFile.WriteLine str
  Loop

  LogFile.Close

      将这个脚本保存为 tee.vbs ,然后我们就可以使用下面的方法保存命令的输出了。当然我们可以简化或增强这个脚本,比如让它可以将命令输出添加到日志文件中,而不是覆盖。

dir | cscript//nologo tee.vbs cmd.log
========================================

      最后,如果你是纯DOS的拥护者,对vbs脚本并不感冒。那么还会有一个ASCode等待你去发现[4]。这是ASCII Assembler技术专家 Herbert Kleebauer 的又一款ASCode力作。

echo Bj@jzh`0X-`/PPPPPPa(DE(DM(DO(Dh(Ls(Lu(LX(LeZRR]EEEUYRX2Dx=>tee.com
echo 0DxFP,0Xx.t0P,=XtGsB4o@$?PIyU WwX0GwUY Wv;ovBX2Gv0ExGIuht6>>tee.com
echo @VyI?@xAp~sA`LZNxOq@Kt@FB?sUs`LbLB?tgj`{gjB~0x>>tee.com

      这个tee.com的用法也并不会比tee.exe和tee.vbs复杂多少,而且在 DOS/9X/NT 下有一致的表现,除了这个16位的.com程序会影响CMD@NT的代码页之外,而且有些“拒人千里”的晦涩难懂之外,它应该还算是一个Pefect的方案。

dir | tee > cmd.log
cd | tee >>cmd.log
========================================

[1]TEE.EXE
http://www.cn-dos.net/forum/atta ... 62e9&download=1

[2][求助]如何实现既在屏幕上显示执行结果又可以把结果保存到
http://www.cn-dos.net/forum/viewthread.php?tid=21531

[3]alt.msdos.batch.nt > Can you use redirection to two outputs?
http://groups.google.com/group/a ... sg/514d1343700b423e

[4]alt.msdos.batch.nt > Tee
http://groups.google.com/group/a ... sg/b157065b8b12ebb2

[ Last edited by willsort on 2006-8-6 at 03:09 ]




※ Batchinger 致 Bat Fans:请访问 [讨论]批处理编程的异类 ,欢迎交流与共享批处理编程心得!

   此帖被 +10 点积分       点击查看详情   
评分人:【 redtek 分数: +10  时间:2007-2-1 06:59





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'>"
2007-1-31 11:33
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

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


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



论坛跳转: