Board logo

标题: 如何将DOS的错误提示打印到一个txt文件里? [打印本页]

作者: IceFire     时间: 2004-3-4 00:00    标题: 如何将DOS的错误提示打印到一个txt文件里?

比如我运行一个自编的程序内容是将一个文件从一个目录COPY到另一个目录. 当该文件不存在时,DOS会提示说找不到文件.

现在我想将DOS提示的信息打印到一个txt文件中

应该怎么做呢?[em26]
作者: gotomsdos     时间: 2004-3-8 00:00
试试这个个批处理
@echo off
copy \1dir\1.ext 2dir>3.txt

作者: qzwqzw     时间: 2004-3-9 00:00
gotomsdos 的方法不行
作者: mys     时间: 2004-3-9 00:00
这样行不行?
if exist \1dir\1.ext  copy \1dir\1.ext 2dir>3.txt
if not exist \1dir\1.ext  echo File not found.
作者: qzwqzw     时间: 2004-3-10 00:00
4楼的法子很取巧啊!可是这个File not found.不是copy发出的啊?不过,也好。如果楼主要求不高,这个也将就了。总比重定向错误设备要简单的多。
作者: moroko     时间: 2004-3-11 00:00
con >*.txt
作者: Climbing     时间: 2004-3-12 00:00
用lmod啊

copy dir1\file1.ext dir2 > lmod /L* [] > 3.txt

lmod是Horst Schaeffer的产品,他的产品好是好,但在中文系统下有些小问题(总出现Invalid keyboard code specified,然后就不能显示中文了),真希望他改进一下支持多国字符集。
Contact -  Email: horst.schaeffer@gmx.net
Homepage:  http://home.nikocity.de/horst.muc/int
作者: Wengier     时间: 2004-3-12 00:00
Horst的软件不用说了,他出的大多数软件,如WBAT等,均无法与汉字系统很好的配合。
作者: WisdomNil     时间: 2006-4-20 16:50
这个问题在纯DOS下就不能解决了?!

我用del *.*命令时,如果目录下没有文件就有出错误提示,或文件不能删除也一样,用楼上的办法就搞不定了,希望高手指点!
作者: kcdsw     时间: 2006-4-21 16:11
帅哥~~试试这个
copy ..\楼主是帅哥.txt 2>帅哥是楼主.txt

作者: tsenix     时间: 2006-4-25 00:51
试试用errorlevel吧... 不过好像是把问题变得更复杂
作者: willsort     时间: 2006-4-25 17:19
Re WisdomNil:

      因为在DOS中,错误设备不能被显式的重定向,同时del/dir等内部命令因为并非使用INT 21/AH=4Ch退出,因此出错时不会产生errrorlevel。

      所以,迄今为止,在DOS命令行或批处理中实现错误转向文件输出是未解决的问题。我目前所想到的思路,是使用debug汇编脚本重定向错误设备或者截取屏幕缓冲区的输出到文件中,但是实现起来比较困难。
作者: arding     时间: 2006-5-11 15:52


  Quote:
Originally posted by kcdsw at 2006-4-21 16:11:
帅哥~~试试这个
copy ..\楼主是帅哥.txt 2>帅哥是楼主.txt

经过试验,发现所谓错误有两种:
1。命令本身错误
2。参数错误
@echo off
echo 参数错误:>帅哥是楼主i.txt
echo ____________________>帅哥是楼主j.txt
echo 命令本身错误:>>帅哥是楼主j.txt
coby ..\楼主是帅哥.txt>>帅哥是楼主i.txt 2>>帅哥是楼主j.txt
::^^
copy 帅哥是楼主i.txt+帅哥是楼主j.txt errsum.txt
msg *<errsum.txt
del 帅哥是楼主i.txt
del 帅哥是楼主j.txt
del errsum.txt
1。命令本身错误 的出错信息能被"2>"得到;
2。参数错误       的出错信息能被">"得到;

[ Last edited by arding on 2006-5-11 at 15:59 ]
作者: willsort     时间: 2006-5-11 19:53
Re arding:

      所有错误,无论是无效命令名错误、无效命令参数错误还是命令执行过程中错误,均可分为两类:向标准错误stderr发出的和向标准输出stdout发出的。二者虽然缺省均指向控制台设备,但它们使用的仍然是不同的端口。

      而 cmd 的 copy 命令是有些特殊的,因为它将许多错误都通过标准输出发出,所以我们用>file对这些错误信息进行重定向,但DOS和CMD下的大多数命令其错误信息通常都通过标准错误发出的。因此,你的二分法不具有普遍意义。

     另外,楼主讨论的错误重定向至今仍限定在DOS环境下,CMD环境下的2>是不予讨论的。
作者: arding     时间: 2006-5-12 09:24
有点明白。我这里不方便使用纯DOS,而且也从来没有深究这些细节。你的意思是不是集中在这句话:

  Quote:
大多数命令其错误信息通常都通过标准错误发出的

如果这样,[纯DOS]是不是用ERRORLEVEL或者2>就可以捕获几乎所有错误?

[ Last edited by arding on 2006-5-12 at 09:28 ]
作者: willsort     时间: 2006-5-13 18:36
Re arding:

      关于纯DOS的错误捕捉,我在12路就已提到。在此重申两点:

      1、DOS没有句柄,所以不支持 1>nul 和 2>nul 的用法;

      2、DOS的内部命令几乎都不支持ERRORLEVEL,所以其错误状态无法用 errorlevel 判定,而只能寻求其它方法判定,比如使用可替代的外部命令(xcopy替代copy),比如copy前后自己使用 if exist 判定文件的存在性。
作者: arding     时间: 2006-5-15 11:42
明白了,我以后会更加明确DOS 和 CMD 的区分。
作者: echolueng     时间: 2009-12-6 00:10    标题: 这个应该不错

@echo off
copy \1dir\1.ext >3.txt
type 3.txt
pause
作者: sunhai1979     时间: 2010-11-21 23:02
if exist 1.log goto co
echo 文件不存在!>2.log
type 2.log
del 2.log
pause>nul
exit
:co
copy 1.log \Personal\Desktop\1.txt>2.log
type 2.log
del 1.txt;1.log;2.log
pause>nul