|
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 值”。
Quote: | 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 |
|
|