Board logo

标题: Wengier 的MS-DOS7.1 的COPY的返回码好象错乱? [打印本页]

作者: GOTOmsdos     时间: 2005-5-20 00:00    标题: Wengier 的MS-DOS7.1 的COPY的返回码好象错乱?

Wengier 的MS-DOS7.1 的COPY的返回码好象有点奇怪?
空间不足的返回码好象错乱? (系统配置没特别的)



作者: Wengier     时间: 2005-5-21 00:00
怎麼奇怪法?能說明一下嗎(我倒沒發現)?
作者: GOTOmsdos     时间: 2005-5-21 00:00
运行COPY后,我想用返回码看是否空间不足,XCOPY好象是4,但COPY后,不管空间是否足,好象都是26,(加载了TW32,DOSLFN)
@echo off
xmsdsk 1000 z: /t /y
copy d:\game\wolf3d z:\ /y >nul
if errorlevel 27 goto 27
if errorlevel 26 goto 26
if errorlevel 5 goto other
if errorlevel 4 goto noenough
if errorlevel 3 goto 3
if errorlevel 2 goto ctrl
if errorlevel 1 goto nofile
if errorlevel 0 goto ok
:27
wbat box error27
goto end
:26
wbat box error26
goto end
ther
wbat box othererror
goto end
:noenough
wbat box noenough
goto end
:3
wbat box errorlevel3
goto end
:ctrl
wbat box ctrlc
goto end
:nofile
wbat box nofile
goto end

:end
set copy=fail
k
最后显示ERROR26
而且,空间不足运行COPY XXXX XXXX >FILE, 或管道 | FIND /I "Insufficient disk space"
> 和|  都无效! 就是不能把这个Insufficient disk space截取下来,但他确实显示了.
XCOPY就正常.


[此贴子已经被作者于2005-5-21 15:09:29编辑过]



作者: defrag     时间: 2005-5-21 00:00


  Quote:
而且,空间不足运行COPY XXXX XXXX >FILE, 或管道 | FIND /I "Insufficient disk space"

应该是COPY XXXX XXXX 2>FILE, 或管道 2|FIND /I "Insufficient disk space"把
作者: defrag     时间: 2005-5-21 00:00
COMMAND.COM是汇编的,外部命令是BASIC的
作者: defrag     时间: 2005-5-21 00:00
哪个是COMMAND.COM的返回码
作者: willsort     时间: 2005-5-22 00:00
Re GOTOmsdos:  在DOS和Win9x命令行下,所有的内部命令均不影响返回码(Errorlevel)。你所看到的26应该是其他程序产生的,而非copy。
作者: GOTOmsdos     时间: 2005-5-22 00:00
其他程序产生的? 你看我的前帖呀,刚刚运行了COPY后的返回码呀!怎么会是其他程序?XCOPY就没问题呀
作者: defrag     时间: 2005-5-22 00:00
是xmsdsk产生的把
作者: GOTOmsdos     时间: 2005-5-23 00:00
最后运行的是COPY啊! 老兄! 返回码怎么会是前面程序的?!
作者: Wengier     时间: 2005-5-23 00:00
确实正如defrag所说,ERRORLEVEL 26是由XMSDSK产生的,而非COPY产生的。willsort上面已提到过,DOS下的内部命令包括COPY命令是不会更改ERRORLEVEL值的,所以当XMSDSK Z:运行完时,返回值是26(正好对应驱动器Z:),而后面运行的COPY命令对此时的ERRORLEVEL值完全没有变动,所以COPY完后返回值仍然是26,即保持不变。而XCOPY则不同,它是外部命令,所以是会修改ERRORLEVEL值的,不可与COPY这个内部命令相提并论。也就是说,此程序的返回值是正常现象了。另外,由于"Insufficient disk space"这个信息并不像一般的程序输出那样是写入STDOUT(即标准输出)的,所以不能用管道命令截取。
作者: GOTOmsdos     时间: 2005-5-23 00:00
哈哈! 看了头儿的祥解,完全明白了! 嘿嘿,让大家奸笑了!....