Board logo

标题: [求助]如何将键盘的输入字符直接送入某变量作为选择项 [打印本页]

作者: Jneny     时间: 2006-2-7 15:05    标题: [求助]如何将键盘的输入字符直接送入某变量作为选择项

我们做选择批处理一般是用CHOICE命令,可否有像INPUT这样的命令能将键盘的输入字符直接送入某变量作为选择项再进行判断,从而省略CHOICE命令。
(或是SET命令可否直接接收键盘的输入字母并赋给某变量从面进行选择)
~~!/??


───────────────── 版务记录 ─────────────────
执行:Will Sort
操作:修改标题:《19028 - DOS 命令……》
说明:原主题作者在通知发出三日后仍未申诉或修改,由版主修改并进行处罚
处罚:扣除因发表该主题而奖励的6点积分,扣除标题违规惩罚性2点积分
提示:请访问 {7326}论坛新手必读,所有人的基本行为准则[转帖]
───────────────── 版务记录 ─────────────────


[ Last edited by willsort on 2006-2-13 at 20:07 ]
作者: JonePeng     时间: 2006-2-7 18:30
在CMD下可以输入 Set /p xyz=
然后就可以将键盘输入的字符赋值到变量xyz中
作者: Jneny     时间: 2006-2-8 14:19
哦 ,你说的是2000中的SET!
在MSDOS中有什么命令呢能有这种功能,MSDOS中的SET好像没有这种用法??
作者: willsort     时间: 2006-2-10 11:04

───────────────── 版主提示 ─────────────────
为了方便论坛用户浏览和版主管理,请修改该主题的标题,以简要叙述主题的内容或意图
如果确认标题不需要修改,请继续回复该主题进行申辩,若申辩理由充分,将取消该通知
如果确认标题需要修改,请点击该主题首帖下方"编辑"按钮,在编辑页面中修改标题栏
如果此通知发出三日后仍未进行申诉或修改,将由版主进行修改,并对作者进行相应处罚
处罚为扣除8点积分,包括追回因发表主题奖励的6分和因标题违规而惩罚性扣除的2分
───────────────── 版主提示 ─────────────────


Re Jonsgen:

      DOS下没有内部命令和非第三方工具的外部命令可以直接提供你所需要的功能,但我们可以通过一些简单的批处理或者第三方提供的工具软件来完成将输入的字符(串)存储到环境变量中。

      现给出批处理的方案,引自[1]略作修补,至于使用的第三方工具有很多,strings/aset/xset/input等都有可能满足你的要求,看你能够找到哪个了。

接受任意字母(不论大小写,如果只想接受大写可以使用 choice 的参数开关 /s)并以大写形式保存至环境变量
@echo off
choice /n /cABCDEFGHIJKLMNOPQRSTUVWXYZ Input a letter:
for %%d in (A B C D E F G H I J K L M N O P Q R S T U V W X Y Z) do if errorlevel H%%d set letter=%%D
echo Your letter "%letter%"
接受任意字母(不论大小写,如果只想接受小写可以使用 choice 的参数开关 /s)并以小写形式保存至环境变量
@echo off
choice /n /cabcdefghijklmnopqrstuvwxyz Input a letter:
for %%d in (a b c d e f g h i j k l m n o p q r s t u v w x y z) do if errorlevel x%%d set letter=%%D
echo Your letter "%letter%"
接受任意数字并保存至环境变量
@echo off
choice /n /c###0123456789 Input a number:
for %%d in (0 1 2 3 4 5 6 7 8 9) do if errorlevel J%%d set numer=%%D
echo Your number "%number%"
这是另一个数字的接受判断代码,但是并未使用*BennyLevel Error Checking*。
@echo off
choice /n /c#########0123456789 Input a number:
for %%d in (0 1 2 3 4 5 6 7 8 9) do if errorlevel 1%%d set numer=%%D
echo Your number "%number%"
[1]*BennyLevel Error Checking*
http://www.cn-dos.net/forum/viewthread.php?tid=17859#pid105801

[ Last edited by willsort on 2006-2-10 at 12:18 ]
作者: Jneny     时间: 2006-2-10 13:32
引用:
@echo off
1.> choice /n /cABCDEFGHIJKLMNOPQRSTUVWXYZ Input a letter:
2.>for %%d in (A B C D E F G H I J K L M N O P Q R S T U V W X Y Z) do if errorlevel H%%d set letter=%%D
3.>echo Your letter "%letter%"
第2句的 if errorlevel H%%d set letter=%%D 是什么作用呀??
请版主赐教~~!!!
作者: willsort     时间: 2006-2-13 17:52
Re Jonsgen:

      这正是上文中所提到的 “BennyLevel Error Checking”,因此这种错误码校验法是由 Benny Pedersen 首先发现的,故名。简单来说,它主要利用了 if errorlevel 对其后的错误码不进行校验的漏洞,详细解释起来比较复杂,如果你可以阅读英文,不妨参考[1]。

[1]Google Group - BennyLevel Error Checking
http://groups.google.com/group/a ... ad/4376cc118df49ef0