中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [已结]关于CMD屏幕保存输出的问题
<   <<   [1] [2] [3]  >>   >
作者:
标题: [已结]关于CMD屏幕保存输出的问题 上一主题 | 下一主题
acoreq
初级用户

傻傻分不清楚...



积分 98
发帖 32
注册 2006-7-1
来自 Shanghai
状态 离线
『第 16 楼』:  

To 3742668 在CMD里RUN的时候有这个错误: The process cannot access the file because it is being used by another process. 不太清楚为什么。。。 但是从DOSKEY的解释来看,似乎有RECALL的功能,不过后面的“%0”我就不清楚是哪个参数了。。。 望解释:) To all: 我的本意是这样子的... 当一个脚本中前前后后ECHO了很多东西,等到脚本结束的时候,我想把之前ECHO的东西(也就是在CMD PROMPT里显示的那些东西)全部保存到一个文件里,作为一个FINAL REPORT。 因为在BAT里,你如果在ECHO后面直接>/>> filename的话,那一行只会被写到文件里去,不会在CMD PROMPT里显示。 现在大家清楚了吧:)


2006-8-5 23:27
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
namejm
荣誉版主

batch fan


积分 5226
发帖 1737
注册 2006-3-10
来自 成都
状态 离线
『第 17 楼』:  

Re acoreq 『第 16 楼』:   终于把你的意图完整地表达出来了,这个过程还真有点折磨人啊。   其实你可以多次使用形如 echo & echo>>filename.txt 的语句来在屏幕显示和输出到文件中去,要是在最后才来一次性地生成屏幕上显示的内容的话,在很多情况下是无法用命令来做到的,只能用最笨的标记的方法来完成,因为一个批处理中,上下语句往往是有前后关系的,后一句可能把前一句的变量给改变了。




尺有所短,寸有所长,学好CMD没商量。 考虑问题复杂化,解决问题简洁化。
2006-8-5 23:55
查看资料  发短消息 网志   编辑帖子  回复  引用回复
acoreq
初级用户

傻傻分不清楚...



积分 98
发帖 32
注册 2006-7-1
来自 Shanghai
状态 离线
『第 18 楼』:  

哦。。 OK 那我就用&吧 和和 就是重复的命令条多一些 看起来不顺眼 哈哈:) 谢谢~


2006-8-6 00:48
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
willsort
元老会员

Batchinger


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

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 www.cn-dos.net/forum ... [2][求助]如何实现既在屏幕上显示执行结果又可以把结果保存到 www.cn-dos.net/forum ... [3]alt.msdos.batch.nt > Can you use redirection to two outputs? groups.google.com ... [4]alt.msdos.batch.nt > Tee groups.google.com ... [ Last edited by willsort on 2006-8-6 at 03:09 ]




※ Batchinger 致 Bat Fans:请访问 [讨论]批处理编程的异类 ,欢迎交流与共享批处理编程心得!
2006-8-6 03:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
namejm
荣誉版主

batch fan


积分 5226
发帖 1737
注册 2006-3-10
来自 成都
状态 离线
『第 20 楼』:  

  willsort分析得十分透彻,几乎把所有可能的情况都考虑到了,理论水平如此深厚,叹服。




尺有所短,寸有所长,学好CMD没商量。 考虑问题复杂化,解决问题简洁化。
2006-8-6 08:18
查看资料  发短消息 网志   编辑帖子  回复  引用回复
superfan
新手上路





积分 8
发帖 5
注册 2006-4-2
状态 离线
『第 21 楼』:  

dir * >#.txt


2006-8-6 09:51
查看资料  发送邮件  发短消息 网志  OICQ (16208577)  编辑帖子  回复  引用回复
acoreq
初级用户

傻傻分不清楚...



积分 98
发帖 32
注册 2006-7-1
来自 Shanghai
状态 离线
『第 22 楼』:  

不愧是斑竹。。。佩服之心有如滔滔黄浦江水。。。 虽然真的是有些“晦涩难懂”,不过大家的思路还是统一的:) 如果有花的话送你999朵 哈哈~! 谢谢!!


2006-8-6 16:10
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
bagpipe
银牌会员

DOS联盟捡破烂的


积分 1144
发帖 425
注册 2005-10-20
来自 北京
状态 离线
『第 23 楼』:  

我是没有那本事来解决这个问题..........


2006-8-6 20:14
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
acoreq
初级用户

傻傻分不清楚...



积分 98
发帖 32
注册 2006-7-1
来自 Shanghai
状态 离线
『第 24 楼』:  

好拉,斑竹CLOSE这个贴吧 和和


2006-8-6 20:43
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
freshman8008
初级用户





积分 28
发帖 12
注册 2006-8-5
状态 离线
『第 25 楼』:  

别关。 俺试过啦,输入arp >>1.txt 回车后依然是滚屏,信息并没有进入到1.txt里,1.txt是空的。 怎么回事啊?


2006-8-7 09:22
查看资料  发短消息 网志   编辑帖子  回复  引用回复
namejm
荣誉版主

batch fan


积分 5226
发帖 1737
注册 2006-3-10
来自 成都
状态 离线
『第 26 楼』:  

  arp不带参数时,显示的是帮助文件,可能在这种情况下帮助文件的信息是强制输出到显示屏上的,不能重定向吧。




尺有所短,寸有所长,学好CMD没商量。 考虑问题复杂化,解决问题简洁化。
2006-8-7 12:50
查看资料  发短消息 网志   编辑帖子  回复  引用回复
bagpipe
银牌会员

DOS联盟捡破烂的


积分 1144
发帖 425
注册 2005-10-20
来自 北京
状态 离线
『第 27 楼』:  

那我也来一个,别拿板砖拽我就行,一个命令执行结果记录批处理,没啥含量啊...........就是为了得分,^_^ @echo off setlocal :top set/p aa=%cd%^> if /i "%aa%"=="quit" goto :eof %aa% 2>nul&&%aa% >>tmp.txt||echo 命令错误&&goto :eof goto top


2006-8-7 17:02
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
freshman8008
初级用户





积分 28
发帖 12
注册 2006-8-5
状态 离线
『第 28 楼』:  

Originally posted by namejm at 2006-8-7 12:50:   arp不带参数时,显示的是帮助文件,可能在这种情况下帮助文件的信息是强制输出到显示屏上的,不能重定向吧。
那可怎么办?偶要的就是这些帮助信息。还有其他一些DOS命令也是这样,不加开关可得到帮助信息,但往往都滚屏。有什么办法能够全部收集这些信息么?谢谢!:)


2006-8-8 08:48
查看资料  发短消息 网志   编辑帖子  回复  引用回复
zh159
金牌会员




积分 3687
发帖 1467
注册 2005-8-8
状态 离线
『第 29 楼』:  

试了一下: 只有“arp 2>1.txt”才能输出到TXT文件,但不知道对其他的命令效果怎样


2006-8-8 09:27
查看资料  发短消息 网志   编辑帖子  回复  引用回复
bagpipe
银牌会员

DOS联盟捡破烂的


积分 1144
发帖 425
注册 2005-10-20
来自 北京
状态 离线
『第 30 楼』:  

@echo off setlocal :top set/p aa=%cd%^> if /i "%aa%"=="quit" goto :eof %aa% 2>nul&&%aa% >>tmp.txt||%aa% >>tmp.txt 2>&1||echo 命令错误或者特殊命令&&goto :eof goto top 这样不就解决了


2006-8-8 16:57
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
<   <<   [1] [2] [3]  >>   >
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


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



论坛跳转: