中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS开发编程 & 发展交流 (开发室) » [分享]如何设置DOS环境中的ERRORLEVEL值
作者:
标题: [分享]如何设置DOS环境中的ERRORLEVEL值 上一主题 | 下一主题
willsort
元老会员

Batchinger


积分 4432
发帖 1512
注册 2002-10-18
状态 离线
『楼 主』:  [分享]如何设置DOS环境中的ERRORLEVEL值

To All: DOS环境中的ERRORLEVEL值一般由外部程序退出时产生,但在某种情况下我们需要自己产生errorlevel值。 以下批处理程序就是关于设置ERRORLEVEL的若干方法,因为系统因素均未经测试,请有心者代劳,敬谢指正! 另外,获取errorlevel值的程序可见: http://model.chinajewelry.net/dos/dosbbs/dispbbs.asp?boardID=6&ID=9358




※ Batchinger 致 Bat Fans:请访问 [讨论]批处理编程的异类 ,欢迎交流与共享批处理编程心得!
2004-2-6 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
willsort
元老会员

Batchinger


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

:: Seterror.bat - First version :: 这是我的第一个算法,用单纯批处理实现,有很多限制 :: 只能设置0-9和255,其它值均作为“大值”被设置为10 @echo off if [%1]==[] goto end if [%1]==[0] goto setzero if [%1]==[255] goto setmax for %%a in (1 2 3 4 5 6 7 8 9) do if [%1]==[%%a] goto set1to9 goto setbig :setzero echo exist> test.txt find "exist" test.txt > nul del test.txt goto end :set1to9 choice /c:123456789 /t:%1,1 /n > nul goto end :setbig choice /c:123456789a /t:a,1 /n > nul goto end :setmax choice /d /n > nul goto end :end

[此贴子已经被作者于2004-2-7 19:32:37编辑过]





※ Batchinger 致 Bat Fans:请访问 [讨论]批处理编程的异类 ,欢迎交流与共享批处理编程心得!
2004-2-6 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
willsort
元老会员

Batchinger


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

::Seterror.bat - Second version ::以下是一个汇编算法,调用了dos提供的int21中断4c子功能 ::使用时第一参数必须是两位16进制数 @echo off if [%1]==[] goto end :main echo a>seterror.asd echo mov ax,4c%1>>seterror.asd echo int21>>seterror.asd echo.>>seterror.asd echo g>>seterror.asd echo q>>seterror.asd debug nul :check call geterror.bat @ if [%el%]==[0] if not [%1]==[00] goto error if not [%2]==[@] echo Set current errorlevel is %el% goto end :error echo. echo Error: Invalid argument "%1" echo. goto end :end




※ Batchinger 致 Bat Fans:请访问 [讨论]批处理编程的异类 ,欢迎交流与共享批处理编程心得!
2004-2-6 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
willsort
元老会员

Batchinger


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

:: Seterror.bat - Third version :: 这是汇编程序的改进版,加入了进制转换代码,可以使用十进制参数了 :: 对于非法的参数处理: :: 22e-->22 e22-->0 256-->0 65535-->255 65536-->0 @echo off if [%1]==[] goto end if exist seterror.com goto run if exist seterror.asd goto debug :setscript echo >seterror.asd A100 echo>>seterror.asd MOV SI,0082 echo>>seterror.asd XOR AX,AX echo>>seterror.asd XOR BX,BX echo>>seterror.asd MOV CX,000A echo>>seterror.asd MOV BL,[SI] echo>>seterror.asd CMP BL,30 echo>>seterror.asd JL 0120 echo>>seterror.asd CMP BL,39 echo>>seterror.asd JG 0120 echo>>seterror.asd SUB BL,30 echo>>seterror.asd MUL CX echo>>seterror.asd ADD AX,BX echo>>seterror.asd INC SI echo>>seterror.asd JMP 010A echo>>seterror.asd MOV AH,4C echo>>seterror.asd INT 21 echo.>>seterror.asd echo>>seterror.asd R CX echo>>seterror.asd 24 echo>>seterror.asd W echo>>seterror.asd Q :debug debug SETERROR.COM nul :run seterror.com %1 if not errorlevel %1 goto error if not [%2]==[@] if errorlevel %1 echo Current errorlevel is set. if exist geterror.bat call geterror.bat %3 ::if exist seterror.com del seterror.com ::if exist seterror.asd del seterror.asd goto end :error echo. echo Error: Fail to set current errorlevel. echo. goto end :end




※ Batchinger 致 Bat Fans:请访问 [讨论]批处理编程的异类 ,欢迎交流与共享批处理编程心得!
2004-2-7 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
willsort
元老会员

Batchinger


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

这是 Horst Schaeffer 的汇编版本,同样支持十进制数参数,不过比我自己编得更条理一些,而且加上了命令行提示。使用时可以将以下文本保存入 el!.txt 文件中,然后在 dos 命令行输入 “debug < el!.txt” 即可得到 el!.com 文件。运行时用法为 “el! 想设置的 errorlevel 值”。
A 100 MOV SI,0081 ;定位字符串源址为命令行 LODSB ;载入[si]处一个字符到寄存器al中 CMP AL,20 ;将之与空格相比较 JZ 0103 ;等于空格则跳向 lodsb, 载入下一字符 DEC SI ;否则 si 减一, 字符串指针指向第一参数 CMP AL,30 ;将载入的 al 值与字符 '0' 相比较 JB 0128 ;若小于 '0' 则跳向 mov dx,0133 处显示帮助 SUB AX,AX ;ax 置零 SUB BH,BH ;bx 置零 MOV DX,000A ;dx 置 10 (保存进制值) MOV BL,[SI] ;取 [si] 处的字符到 bl 中 INC SI ;字符串指针 si 加一 SUB BL,30 ;减去 '0' (将 bl 的值有字符数转换为二进制数) CMP BL,DL ;比较 bl 与 dl 的值 (测试 bl 是否是非法字符≥10) JNB 0124 ;bl ≥ 10 则跳向 mov ah,4c (置 errorlevel) MUL DX ;将原数 ax 乘以 10 (dx) ADD AX,BX ;将原数 ax 加上 新数 bx JNB 0111 ;cf=0 (??) 则跳回 mov dx, 000a (转换下一个字符) MOV AH,4C ;置 errorlevel 退出 INT 21 MOV DX,0133 ;定位 [0133] 处的帮助字符串 MOV AH,09 ;显示 [dx] 处的字符串 INT 21 SUB AL,AL ;al 置零 JMP 0124 ;跳回mov dx,0133处显示帮助 DB 'EL! n' 0d 0a 'sets errorlevel to n=0..255' 0d 0a 24 r cx 58 n el!.com w q




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

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


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



论坛跳转: