|
hake
初级用户
积分 103
发帖 43
注册 2006-12-22
状态 离线
|
『楼 主』:
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?
这上面是我的理解及在我的理解下提出的问题,我对这个有点迷糊,望各位高手指出!
|
|
2006-12-24 12:14 |
|
|
redtek
金牌会员
积分 2902
发帖 1147
注册 2006-9-21
状态 离线
|
『第
2 楼』:
ERRORLEVLE 是返回值。
但是,当使用 IF ERRORLEVEL 3 GOTO DEFRAG 让批处理测试上一个程序运行的返回值时:
“如果返回值大于或等于由IF命令所说明的值,则MS-DOS就执行所说明的命令”
如果 CHOICE 你设定了5个选项,就要倒序判断它们的返回值,因为:
(下面是错误的例子)
IF ERRORLEVEL 1 GOTO DEFRAG
IF ERRORLEVEL 2 GOTO MEM 看上面例子,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
|
Redtek,一个永远在网上流浪的人……
_.,-*~'`^`'~*-,.__.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._ |
|
2006-12-24 21:38 |
|
|
redtek
金牌会员
积分 2902
发帖 1147
注册 2006-9-21
状态 离线
|
『第
3 楼』:
翻开上面那本介绍的书 P122页的第 9.7 节(替代CHOICE命令)一篇,其中是举例了一个汇编小代码来代替CHOICE外部命令。
看完这篇文章,就知道了 CHOICE 是如何将你选择的那个返回值“返回给” ERRORLEVEL的~:)
MOV AL,AH
MOV AH,4C
INT 21 上面是汇编代码。 MOV AL,AH ,被传送到 AL 寄存器内的值就是返回码。
当执行 4C 功能时,系统将 AL 寄存器内的值返回给你(给 ERRORLEVEL),
所以,你可以用 IF ERRORLEVEL 来判断那些值~:)
|
Redtek,一个永远在网上流浪的人……
_.,-*~'`^`'~*-,.__.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._ |
|
2006-12-24 21:45 |
|
|
hake
初级用户
积分 103
发帖 43
注册 2006-12-22
状态 离线
|
『第
4 楼』:
还有一个问题,就是为什么输入d的返回码会大于等于3?
|
|
2006-12-24 21:48 |
|
|
scriptor
银牌会员
积分 1187
发帖 555
注册 2006-12-21
状态 离线
|
|
2007-1-4 01:33 |
|
|