|
原帖由 sgw888 于 2011-5-10 08:53 发表
根据CHENALL 提示,只修复一处BUG。
另外,CHENALL 有些地方,改的地方,我看不懂。 从内存中取变量值的方法。实在搞不懂。
####pause 会返回按键的ASCII码。
pause Do you want to continue? (y/n)
#获取按键字母并转为大写。Y=89,N=78
set /a JX=*0x4CB00 & 0xdf
if %JX%==89 && exit
if %JX%==78 && goto :end
goto :_SFJX
####上面也可以用以下方法,直接从内存中取出该字符####
cat --length=1 --skip=0x100 (md)0x265+1 | set JX=
if /i "%JX%"=="y" && exit
if /i "%JX%"=="n" && goto :end
我解释一下,这个应该很容易明白的。
1.首先pause可以返回按键的ASCII码。比如按建Y的ASCII码为 89(大写)或121(小写)
在内存中是十六进制数0x59或0x79用字符显示的字符是Y或y
2.内存中0x4cb00存放的是上一个命令的返回值。
3.第一种方法直接取这个按键的值和0xdf进行与操作(也是小写转大写的方法)
比如: 大小写状态下按了Y键,而内存中的值是0x79
0x79 01111001
与
0xdf 11011111
-------------------------
0x59 01011001
4.第二种方法是直接取按键的字符
其中(md)0x265+1就是0x265*512开始的1个扇区=0x4CA00
--skip=0x100就是从上面的偏移0x100处开始显示字符即0x4cb00
--length=1 只显示一个字符。
| set JX= 把这个字符设为一个变量JX |
|