中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 如何在批处理中编写选择菜单?
作者:
标题: 如何在批处理中编写选择菜单? 上一主题 | 下一主题
ql2000
初级用户




积分 211
发帖 23
注册 2004-4-12
状态 离线
『楼 主』:  如何在批处理中编写选择菜单?

我见很多批处理都能实现选择菜单,例如:
defrag,mem,end[D,M,E]?

请问这是如何实现的?谢谢!




2004-4-27 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
Kinglion
铂金会员

痴迷DOS者


积分 5792
发帖 1921
注册 2003-6-20
来自 金獅電腦軟體工作室
状态 离线
『第 2 楼』:  

我以前在工作中使用的一個批處理文件

@ECHO OFF
CLS
SET EC=
GOTO GetDRV

NAME:      SETEC.BAT  Shareware Version
PURPOSE:   Set parameters for "Pharmacopoeia Manage System"
COPY:        KingLion SoftWare WarkRoom & Dou Jie Hui
VERSION:   1.01
DATE:      11-06-97

:GetDRV
CLS
echo.
echo.
echo.
echo.
echo.
echo.
echo.
echo                圻哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌咣
echo                ? Type the letter of the Parameters where you   ?
echo                ?  want to run  Program                                  ?
echo                ?   (C)Copyright Kinglion Software Workroom.    ?
echo                ?          (Usually parameters is E)            ?
echo                勰哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪嫩
echo                ?                                               ?
echo                ?            E = 选择西药药品数据库             ?
echo                ?                                               ?
echo                ?                                               ?
echo                ?            C = 选择中药药品数据库             ?
echo                ?                                               ?
echo                圮苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苒
echo.
echo.
echo.
echo.
echo.
C:\NWDOS\GETKEY e99,E98,c97,C96
CLS
IF ERRORLEVEL 99 GOTO SETE
IF ERRORLEVEL 98 GOTO SETE
IF ERRORLEVEL 97 GOTO SETC
IF ERRORLEVEL 96 GOTO SETC

:SETE
SET EC=E
GOTO QUIT

:SETC
SET EC=C
GOTO QUIT

:QUIT
CLS
相關文件見下面壓縮包:
打开附件



熟能生巧,巧能生精,一艺不精,终生无成,精亦求精,始有所成,臻于完美,永无止境!
金狮電腦軟體工作室愿竭诚为您服务!
QQ群:8393170(定期清理不发言者)
个人网站:http://www.520269.cn
电子邮件:doujiehui@vip.qq.com
微信公众号: doujiehui
2004-4-27 00:00
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (79207959)  编辑帖子  回复  引用回复
龙王
银牌会员




积分 1186
发帖 334
注册 2003-5-30
状态 离线
『第 3 楼』:  



  Quote:
以下是引用ql2000在2004-4-27 12:44:07的发言:
我见很多批处理都能实现选择菜单,例如:
defrag,mem,end[D,M,E]?

请问这是如何实现的?谢谢!

@echo off
choice /dme defrag,mem,end
if errorlevel 3 goto end
if errorlevel 2 goto mem
if errorlevel 1 goto defrag
:defrag
defrag
goto end
:mem
mem
goto end
:end



2004-4-27 00:00
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (3113983)  编辑帖子  回复  引用回复
ql2000
初级用户




积分 211
发帖 23
注册 2004-4-12
状态 离线
『第 4 楼』:  

非常感谢 Kinglion 和龙王。but 龙王里的choice命令好像只有win2003才有,kinglion的我又看不懂,能直接编给我看看吗,谢谢了!

2004-4-27 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
龙王
银牌会员




积分 1186
发帖 334
注册 2003-5-30
状态 离线
『第 5 楼』:  



  Quote:
以下是引用骨灰龙在2004-2-9 8:57:44的发言:
choice其实是有两个版本。
在win2003server中有一个文件叫choice.exe,而我们所说的choice是DOS下自带的choice.com文件。两个文件的大小差别很大,功能却一样。
choice.exe只能在xp以上的系统中才能使用。



  Quote:
以下是引用Wengier在2004-2-11 10:33:27的发言:

DOS中自带的CHOICE叫作CHOICE的DOS版本,而WinNT/2K/XP/2003所带的CHOICE叫作CHOICE的Win32版本,它们互相完全不同,只是应用程序在不同操作系统/平台下的移植品罢了,就像同一个程序的Win版本和Linux版本那样。



2004-4-28 00:00
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (3113983)  编辑帖子  回复  引用回复
ql2000
初级用户




积分 211
发帖 23
注册 2004-4-12
状态 离线
『第 6 楼』:  

to 龙王:

我在2k和xp都搜索过,没有choice这个命令啊........请告知,谢谢!

顺便问问,听说if命令都能实现,但不知道如何编,哪位知道的请告知,谢谢!



2004-4-28 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
willsort
元老会员

Batchinger


积分 4432
发帖 1512
注册 2002-10-18
状态 离线
『第 7 楼』:  

Re ql2000:

    2000和XP都不缺省安装 choice.exe 或者 choice.com,这应该是 Wengier 兄的一时之误。

    要想实现菜单操作,必须接受键盘输入,所以需要 CHOICE 或者 GETKEY 等类似的程序; IF 命令实现的是键盘输入的判断,以利于跳转执行不同的命令内容;无法单独用它实现菜单操作。

    另外,我很少使用QQ或者其它即时通讯软件,主要还是使用电子邮件进行网络交流,邮箱地址可以在本贴内上方的邮箱按钮提示中找到。



※ Batchinger 致 Bat Fans:请访问 [讨论]批处理编程的异类 ,欢迎交流与共享批处理编程心得!
2004-4-28 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
ql2000
初级用户




积分 211
发帖 23
注册 2004-4-12
状态 离线
『第 8 楼』:  

那通用性不是................如果我将编写好的bat放到其他机上不就运行不了吗?
难道没有其他办法了么?唉...........

2004-4-30 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
willsort
元老会员

Batchinger


积分 4432
发帖 1512
注册 2002-10-18
状态 离线
『第 9 楼』:  

Re ql2000:

  楼主能够考虑到通用性,看来是一个考虑比较全面的人。

  一般意义上说,我们遇到通用性(也可以称之为可移植性或者兼容性)的问题时,有两类解决办法,它们分别面向两个方向:

  一类是面向系统平台的,那就是扩展平台的功能供给。比如此例,我们需要批处理中的菜单功能在没有CHOICE的系统平台下也可以正常运行,比如WINDOWS 2000或者WINDOWS XP系统。那么类似的解决办法,就是向外发布自己的批处理程序时,随同发布此程序所需的CHOICE程序,以供我们的程序随时调用。这样我们在没有CHOICE的系统中增加了CHOICE,就相当于扩展了系统的功能,也就是增强了系统的兼容性。有相当多的DOS或者WINDOWS下的程序就是这样实现不同平台下相同的功能支持的,比如本站的DOS71安装盘,为了实现程序的向导式安装,就附带了WBAT等多个批处理增强工具或软件。

  另一类是面向程序自身的,那就是缩减程序自身的功能需求。仍如上例,我们需要批处理中的菜单功能在没有CHOICE的系统平台下也可以正常运行,比如WINDOWS 2000或者WINDOWS XP系统。那么类似的解决办法就是使我们的程序不需要CHOICE程序,那么不使用CHOICE如何实现呢?我们可以考虑使用在批处理中插入实现菜单功能的汇编代码,然后使它在运行时自动汇编为机器代码执行。当然,代码不会太长,否则付出的代价就未免太大了。也有很多的程序,就是通过缩减自身功能需求来实现不同平台下相同的功能支持的。

  当然,这两类方法在更底层的方向上来看,其实是一致的。无论是扩展系统功能还是缩减自身需求,其实都意味着由程序开发者自己提供相应的功能,差异只在于前者将此功能与系统共享(共有),而后者将此功能封装给自身(私有)。如果自身实在无法提供此功能,那么只能将此功能砍掉,通过其他折中的方法实现。仍以上例说明,我们就可以考虑不在程序中使用菜单,而通过命令行开关参数加帮助提示的方法来实现不同功能跳转选择。当然,这并不是解决问题的办法,而是"逃避"问题,但在许多场合,我们恰恰需要"逃避",或者不得不"逃避",这属于在程序设计和规划时就需要考虑的问题。

  其实,关于兼容性的问题,确实是个很复杂的问题。我们知道,平台的多样性带来了平台的兼容性,也带来了软件的可移植性。一方面,我们为了能够使用得更多更漂亮,而鼓励多样性的存在;另一方面,我们为了能够使用得更广更稳定,而禁绝多样性。但无论我们是鼓励还是禁绝,现实中总始终存在着各种各样得多样性和一致性的对立和统一。比如UNIX家族和WINDOWS家族,比如WINDOWS 9X系列和WINDOWS NT系列,比如JAVA和BASIC,诸如此类,不一而足。

  本来,我们可以不必关心兼容性的问题。因为大多数情况下,软件开发者在发布软件时就已经考虑到大多数的兼容性问题,比如WINDOWS 98兼容8位代码,比如WINDOWS XP兼容16位代码。而对于上面这个问题,在以前也不是问题,因为那时大多数人使用WINDOWS9X系统,而此系列都将CHOICE作为必备的系统配置,并且不需做任何设置就可直接运行。根本不需要考虑是否附带CHOICE的问题。但是,WINXP发布后,情势急转直下。很多用户因为华丽的界面和稳定的性能而趋之若骛,但WINXP与WINNT一样做出了为了稳定性而舍弃兼容性的选择,而这被舍弃的兼容性中就包括部分16位DOS程序,当然也包括CHOICE。在以后的某些版本的WINDOWS中虽然对此做出了补偿,就是提供了对应原DOS程序的WINDOWS版本,包括CHOICE.EXE,但已经是为时晚矣。

  另外,此问题仍然有更多复杂的细节。

  比如,我们在提供CHOICE程序时,就应该考虑到是否提供CHOICE的不同版本,是否让程序根据系统平台自动选择不同的版本。因为CHOICE的16位DOS版和32位WIN版虽然功能和界面大体相似,但所基于的平台却有很大的不同,这就造成了各种兼容性问题的存在,而我们当然不能在解决了一个兼容性问题之后,又引入另一个兼容性问题。

  再如,我们如果决定附带不同的CHOICE,那么是否应该考虑一下,我们只为了能让一个数十字节的程序正常运行,而附带两个数十K字节的辅助程序,甚而还要修改原来的代码,使得代码的复杂性也随之提升,这代价是否花得太大了?

  冗冗絮絮说了这许多,不知 ql2000 兄可以听进去多少,只是觉得有必要提醒一下各位对批处理有进一步学习兴趣的初学者,应该注意到的一些问题,这其实也是在其他语言的编程领域需要注意的问题,只不过在批处理这里尤为突出而已。真诚希望此文能使大家对批处理编程有更深的认识和帮助!有想进一步探讨的朋友,可以在本站发帖,我将继续关注这里,也希望与大家更深入的讨论问题。

  与此有关的链接:
  关于编制带病毒特性的批处理程序的讨论!
  http://dos.e-stone.cn/dosbbs/dispbbs.asp?boardID=12&ID=6961

  批处理编程的异类
  http://dos.e-stone.cn/dosbbs/dispbbs.asp?boardID=12&ID=8905

  我的关于批处理的另外一篇感言
  http://dos.e-stone.cn/dosbbs/dispbbs.asp?boardID=12&ID=8609


[此贴子已经被作者于2004-5-1 20:28:52编辑过]






※ Batchinger 致 Bat Fans:请访问 [讨论]批处理编程的异类 ,欢迎交流与共享批处理编程心得!
2004-5-1 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
zhri
高级用户

zhri


积分 665
发帖 153
注册 2004-2-23
状态 离线
『第 10 楼』:  

绝倒。

一个choice文件......

DOS6.22里有。

windows95、98里也有。

2004-5-3 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
k39000
中级用户




积分 230
发帖 16
注册 2004-4-17
状态 离线
『第 11 楼』:  

http://www.pointsmoney.com/signin.php?RID=476823

2004-5-3 00:00
查看资料  发送邮件  发短消息 网志  OICQ (118019000)  编辑帖子  回复  引用回复
k39000
中级用户




积分 230
发帖 16
注册 2004-4-17
状态 离线
『第 12 楼』:  

如何在网上赚钱  你们相信网上赚钱吗?
古人云:“宁可信其有,不可信其无”啊!那么你就进去试试吧?////加入方法很简单的哦:
    http://www.pointsmoney.com/signin.php?RID=476823
  USER ID (Valid Email): 填你的电子邮箱
  Password : 密码,你自己想一个吧
  Confirm Password : 确认你的密码,再打一次你的密码
   填完后,这个网站就会发一个Email给你,
  好了,现在点击 Submit 。好,申请完了。现在,你就去你的电子邮箱,这个网站发给你一 个Email。去看,在Email中间有一条长长的网址 进去后,接着,再次输入资料。 下面是我为了方便大家的加入,详细说明了加入过程中的细节(注:一定要用拼音打字呀,
不然申请不了的):
  First Name: 名字(例:志华就打Zhihua)
  Last Name: 姓 (例:李就打li)
  Address: 家庭住址(写拼音,一定要详细填写,包括我省略号后面省略掉的内容,不然收不到汇款单喽!例:City: 城市 (例:长沙 市,就打changshashi)
  Zip/Postal Code: 邮编 ( 填你的,例123456 )
  State: 填 (可以填省份,例:湖南省,就打hunansheng)
  Country: 国家(选 China——应该都是中国人吧,如果没China即中国可选,你可随 意选一 个国家,把China填在State里或在Address里详细写明) )
  Phone: 电话号码 ( 国家代码 86 + 区位号的电话号码 例(0371-3251513 → 86-0371- 3251513)
  Fax: 可不填
  Mobile: 可不填
  Gender: 性别 Male(男); Femaie (女)
  Do you have Credit Card: 你有信用卡吗?(选No吧)
  Age: 你几岁(你自己选吧)
  Profession: 你的职业是什么?(自己选吧)
  Monthly Lncome: 你每月的收入是多少?(自己选吧)
  Do you have Web Site: 你有个人网站吗?(没有就不填)
  好,填完,点击 Submit
  接着就是选择爱好兴趣(本人全选,你看着办吧)。
  加入完毕后,它就出现一个登陆框,如果你就登陆了,网站就送0.4美金给你。所以, 最好是申请完成后登陆一次吧,这样就得到0.4美金了。登陆时你只需填入你的电子邮箱,然 后在下一栏输入密码,点击 Submit就可以了 。
  然后,就是赚到钱之法了。不可乱点,有些是要花钱和点数的。
  你赚到钱的方法:到各个网站的留言板中,邮箱中,或其他你能想到的地方,把本文内容全部复制、粘贴进去!多多益善 。只要有人点,你就可以挣钱了!多好啊!而且反正赚的是外国人的钱,不赚白不赚!
  好了,祝你赚到钱呀!不,应该是大家一起赚呀!只有互相帮助,才能和气生财嘛。
最后,若各位朋友有什么不懂地地方,可与本人交流交流。


2004-5-3 00:00
查看资料  发送邮件  发短消息 网志  OICQ (118019000)  编辑帖子  回复  引用回复
landskyb
新手上路





积分 9
发帖 4
注册 2009-4-20
状态 离线
『第 13 楼』:  

willsort兄真的是细心,耐心!
终于翻到了要找的帖子。。呵呵

2009-5-12 10:33
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: