![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-13 13:42 |
共 47,811 主题排行 / 349,897 发帖 / 今日 0 篇 / 48,256 会员排行 |
| DOS学习入门 & 精彩文章 (教学室) » if语句的几个问题 |
| 可打印版本 1,148 / 4 |
| 第1楼 hake | 发表于 2006-12-24 12:14 |
| 初级用户 发帖 43 积分 103 | |
|
if语句的几个问题 if语句的返回值怎么判断?
choice 使用此命令可以让用户输入一个字符,从而运行不同的命令。使用时应该加/c:参数,c:后应写提示可 输入的字符,之间无空格。它的返回码为1234…… 如: choice /c:dme defrag,mem,end 将显示 defrag,mem,end[D,M,E]? 例如,test.bat的内容如下: @echo off choice /c:dme defrag,mem,end if errorlevel 3 goto defrag 应先判断数值最高的错误码 if errorlevel 2 goto mem if errotlevel 1 goto end :defrag c:\dos\defrag goto end :mem mem goto end :end echo good bye 我的理解是,首先要求你输入一个字符,“dme”中的一个,他的本意是,如果输入d,就跳转到defrag语句, if errorlevel 3 goto defrag 这一句是判断返回值,判断返回值是不是等于3,是的话就跳转到defrag。 我的问题就是:为什么输入d的返回值会是3? 这上面是我的理解及在我的理解下提出的问题,我对这个有点迷糊,望各位高手指出! |
|
| 第2楼 redtek | 发表于 2006-12-24 21:38 |
| 金牌会员 发帖 1,147 积分 2,902 | |
|
ERRORLEVLE 是返回值。
但是,当使用 IF ERRORLEVEL 3 GOTO DEFRAG 让批处理测试上一个程序运行的返回值时: “如果返回值大于或等于由IF命令所说明的值,则MS-DOS就执行所说明的命令” 如果 CHOICE 你设定了5个选项,就要倒序判断它们的返回值,因为: (下面是错误的例子) 看上面例子,IF 判断 ERRORLEVEL 返回值的特性: 1) 不是 IF ERRORLEVEL 的值(等于)什么就跳转到哪儿 2) 而是 IF ERRORLEVEL 的值(大于 或 等于)什么值,就跳转到哪儿 如果你要把最小的值放在最前的语句(例如上面的代码),则按照 IF ERRORLEVEL 的特性判断, 如 IF ERRORLEVEL 大于或等于 1 ,可是,所有的返回值都会大于或等于 1,而不是我们心里认为的(绝对等于)。 关于更详细的 choice 与 if errorlevel 的介绍,详见由 tianzizhi 上传的非常好的一本教程~:) (下载下面的教程,翻开P46--P50页,看完后会非常透彻) MS-DOS6.2批处理文件高级指南 http://www.cn-dos.net/forum/viewthread.php?tid=25043&fpage=1 |
|
| 第3楼 redtek | 发表于 2006-12-24 21:45 |
| 金牌会员 发帖 1,147 积分 2,902 | |
|
翻开上面那本介绍的书 P122页的第 9.7 节(替代CHOICE命令)一篇,其中是举例了一个汇编小代码来代替CHOICE外部命令。
看完这篇文章,就知道了 CHOICE 是如何将你选择的那个返回值“返回给” ERRORLEVEL的~:) 上面是汇编代码。 MOV AL,AH ,被传送到 AL 寄存器内的值就是返回码。 当执行 4C 功能时,系统将 AL 寄存器内的值返回给你(给 ERRORLEVEL), 所以,你可以用 IF ERRORLEVEL 来判断那些值~:) |
|
| 第4楼 hake | 发表于 2006-12-24 21:48 |
| 初级用户 发帖 43 积分 103 | |
|
还有一个问题,就是为什么输入d的返回码会大于等于3?
|
|
| 第5楼 scriptor | 发表于 2007-01-04 01:33 |
| 银牌会员 发帖 555 积分 1,187 | |
|
顶一个
又是汇编的 强啊 |
|
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |