Board logo

标题: 请问这个带有选择项的批处理是怎么样实现的 [打印本页]

作者: qingyangecho     时间: 2006-11-2 08:50    标题: 请问这个带有选择项的批处理是怎么样实现的

CLS
COLOR 0A
GOTO MENU

:MENU
ECHO.
ECHO.               =-=-=-=-=请选择要启动的服务项目=-=-=-=-=
ECHO.
ECHO.                       1  启动-本机网络服务
ECHO.
ECHO.                       2  启动-USB和COM服务
ECHO.  
ECHO.                       3  启动-DHCP和NAT服务
ECHO.
ECHO.                       4  启动-用户权限服务
ECHO.
ECHO.                       5  启动-启动全部服务
ECHO.                       
ECHO.                       6  安装虚拟网卡1和8
ECHO.
ECHO.                       7       退   出
ECHO.
ECHO.
ECHO.
CHOICE /C 1234567 /N /M 请输入选择项目的序号:
IF ERRORLEVEL 1 IF NOT ERRORLEVEL 2 GOTO SERVICE1
IF ERRORLEVEL 2 IF NOT ERRORLEVEL 3 GOTO SERVICE2
IF ERRORLEVEL 3 IF NOT ERRORLEVEL 4 GOTO SERVICE3
IF ERRORLEVEL 4 IF NOT ERRORLEVEL 5 GOTO SERVICE4
IF ERRORLEVEL 5 IF NOT ERRORLEVEL 6 GOTO SERVICE5
IF ERRORLEVEL 6 IF NOT ERRORLEVEL 7 GOTO SERVICE6
IF ERRORLEVEL 7 IF NOT ERRORLEVEL 8 GOTO END
PAUSE

:SERVICE1
NET START VMNETUSERIF
NET START VMNETBRIDGE
GOTO MENU

:SERVICE2
NET START HCMON
NET START VMPARPORT
GOTO MENU

:SERVICE3
SC CREATE VMnetDHCP BINPATH= "%WINDIR%\SYSTEM32\VMNETDHCP.EXE" DISPLAYNAME= "VMware DHCP Service" DEPEND= VMnetuserif
SC CREATE "VMware NAT Service" BINPATH= "%WINDIR%\SYSTEM32\VMNAT.EXE" DISPLAYNAME= "VMware NAT Service" DEPEND= VMnetuserif
NET START VMnetDHCP
NET START "VMware NAT Service"
GOTO MENU

:SERVICE4
SC CREATE VMAuthdService BINPATH= "%CD%\VMWARE-AUTHD.EXE" DISPLAYNAME= "VMware Authorization Service" DEPEND= vmx86
NET START VMAUTHDSERVICE
GOTO MENU

:SERVICE5
NET START VMNETUSERIF
NET START VMNETBRIDGE
SC CREATE VMnetDHCP BINPATH= "%WINDIR%\SYSTEM32\VMNETDHCP.EXE" DISPLAYNAME= "VMware DHCP Service" DEPEND= VMnetuserif
SC CREATE "VMware NAT Service" BINPATH= "%WINDIR%\SYSTEM32\VMNAT.EXE" DISPLAYNAME= "VMware NAT Service" DEPEND= VMnetuserif
NET START VMnetDHCP
NET START "VMware NAT Service"
NET START HCMON
NET START VMPARPORT
SC CREATE VMAuthdService BINPATH= "%CD%\VMWARE-AUTHD.EXE" DISPLAYNAME= "VMware Authorization Service" DEPEND= vmx86
NET START VMAUTHDSERVICE
GOTO MENU

:SERVICE6
DEVCON -R INSTALL %SYSTEMROOT%\INF\VMNETADAPTER.INF *VMnetAdapter1
DEVCON -R INSTALL %SYSTEMROOT%\INF\VMNETADAPTER.INF *VMnetAdapter8
GOTO MENU

:END

[ Last edited by namejm on 2006-11-2 at 09:37 AM ]
作者: lxmxn     时间: 2006-11-2 09:25

  主要是利用了choice命令的特性来实现的,不过xp系统好象没有自带这个命令。


[ Last edited by lxmxn on 2006-11-2 at 09:27 AM ]
作者: kcdsw     时间: 2006-11-2 10:49


  Quote:

  1. CLS
  2. COLOR 0A
  3. GOTO MENU

  4. :MENU
  5. ECHO.
  6. ECHO.               =-=-=-=-=请选择要启动的服务项目=-=-=-=-=
  7. ECHO.
  8. ECHO.                       1  启动-本机网络服务
  9. ECHO.
  10. ECHO.                       2  启动-USB和COM服务
  11. ECHO.  
  12. ECHO.                       3  启动-DHCP和NAT服务
  13. ECHO.
  14. ECHO.                       4  启动-用户权限服务
  15. ECHO.
  16. ECHO.                       5  启动-启动全部服务
  17. ECHO.                       
  18. ECHO.                       6  安装虚拟网卡1和8
  19. ECHO.
  20. ECHO.                       7       退   出
  21. ECHO.
  22. ECHO.
  23. ECHO.
  24. set /p in =  请输入选择项目的序号:
  25. IF [%in%] == [1] GOTO SERVICE1
  26. IF [%in%] == [2] GOTO SERVICE2
  27. IF [%in%] == [3] GOTO SERVICE3
  28. IF [%in%] == [4] GOTO SERVICE4
  29. IF [%in%] == [5] GOTO SERVICE5
  30. IF [%in%] == [6] GOTO SERVICE6
  31. IF [%in%] == [7] GOTO END
  32. PAUSE >nul

  33. :SERVICE1
  34. NET START VMNETUSERIF
  35. NET START VMNETBRIDGE
  36. GOTO MENU

  37. :SERVICE2
  38. NET START HCMON
  39. NET START VMPARPORT
  40. GOTO MENU

  41. :SERVICE3
  42. SC CREATE VMnetDHCP BINPATH= "%WINDIR%\SYSTEM32\VMNETDHCP.EXE" DISPLAYNAME= "VMware DHCP Service" DEPEND= VMnetuserif
  43. SC CREATE "VMware NAT Service" BINPATH= "%WINDIR%\SYSTEM32\VMNAT.EXE" DISPLAYNAME= "VMware NAT Service" DEPEND= VMnetuserif
  44. NET START VMnetDHCP
  45. NET START "VMware NAT Service"
  46. GOTO MENU

  47. :SERVICE4
  48. SC CREATE VMAuthdService BINPATH= "%CD%\VMWARE-AUTHD.EXE" DISPLAYNAME= "VMware Authorization Service" DEPEND= vmx86
  49. NET START VMAUTHDSERVICE
  50. GOTO MENU

  51. :SERVICE5
  52. NET START VMNETUSERIF
  53. NET START VMNETBRIDGE
  54. SC CREATE VMnetDHCP BINPATH= "%WINDIR%\SYSTEM32\VMNETDHCP.EXE" DISPLAYNAME= "VMware DHCP Service" DEPEND= VMnetuserif
  55. SC CREATE "VMware NAT Service" BINPATH= "%WINDIR%\SYSTEM32\VMNAT.EXE" DISPLAYNAME= "VMware NAT Service" DEPEND= VMnetuserif
  56. NET START VMnetDHCP
  57. NET START "VMware NAT Service"
  58. NET START HCMON
  59. NET START VMPARPORT
  60. SC CREATE VMAuthdService BINPATH= "%CD%\VMWARE-AUTHD.EXE" DISPLAYNAME= "VMware Authorization Service" DEPEND= vmx86
  61. NET START VMAUTHDSERVICE
  62. GOTO MENU

  63. :SERVICE6
  64. DEVCON -R INSTALL %SYSTEMROOT%\INF\VMNETADAPTER.INF *VMnetAdapter1
  65. DEVCON -R INSTALL %SYSTEMROOT%\INF\VMNETADAPTER.INF *VMnetAdapter8
  66. GOTO MENU

  67. :END

  68. 代码未测试
        kcdsw        发表于:  2006-11-01  22:53


作者: youxi01     时间: 2006-11-2 10:51
2000/XP下没有chioce命令,要实现楼主所述功能,可以利用set /P
作者: qingyangecho     时间: 2006-11-2 12:03
奇怪的是加入这个文件在WINDOWS中是可以运行了,可不管加入的是choice.exe或choice.com在dos中都不可以运行
作者: lxmxn     时间: 2006-11-2 12:14

  你把chioce.exe加到哪里去了?

作者: qingyangecho     时间: 2006-11-2 12:35
TO:lxmxn

加到98启动盘生成的虚拟内存盘里,和批处理文件同在这个盘的根目录下

TO:kcdsw

谢谢你写的这个批处理,但还是没有成功,不管选哪个数值,它依然执行的是第一条
作者: youxi01     时间: 2006-11-2 12:56
如果加个检测语句,然后直接来个goto :service%in%会不会简单很多呢?
作者: lxmxn     时间: 2006-11-2 13:08

  应该加到系统的文件夹里面吧?

作者: qingyangecho     时间: 2006-11-2 13:13
这个就不懂了,连加在哪都不懂了
作者: qingyangecho     时间: 2006-11-2 13:16


  Quote:
Originally posted by lxmxn at 2006-11-2 01:08 PM:

  应该加到系统的文件夹里面吧?

系统找需要的文件都是从自身所处的文件夹里开始找起的,找不到才会到系统文件夹里找.DOS应该也不会例外吧,还有,我是想把这个批处理做到启动盘里的,就更不存在系统文件夹一说了
作者: 不得不爱     时间: 2006-11-2 20:38
那你的在AUTOEXEC.BAT里加入该文件的工作路径
作者: fastslz     时间: 2006-11-2 21:24
AUTOEXEC.BAT、NET START我在郁闷是纯DOS下还是XP运行此批处理啊?
作者: qingyangecho     时间: 2006-11-2 22:04
choice是否在VM中用不了,发须在实机中使用?
作者: fastslz     时间: 2006-11-2 22:13
从Win2003中提取的CHOICE
http://www.cn-dos.net/forum/view ... mp;highlight=choice

VM中是什么系统?一定要搞清纯DOS批处理还是CMD(XP)下批处理,2者有本质上的区别
作者: qingyangecho     时间: 2006-11-2 22:24
我用的是98启动盘,所以用的是从本论坛下载的CHOICE.COM

VM是vmware的简称,中文名子就是虚拟机
作者: fastslz     时间: 2006-11-2 22:42
汗~VM(虚拟机)中是什么操作系统?(虚拟机可以安装任何系统所以我问什么操作系统?)
如果98启动盘,你不能运行此批处理,第一条命令
CLS
COLOR 0A
纯DOS没有COLOR 0A命令,更不用说NET START命令

你所说的执行第一条命令后跳出批处理,原因是你可能在CONFIG.SYS中使用了COMMAND.COM  /F参数

所有回答只是猜测~
作者: 不得不爱     时间: 2006-11-2 22:51
你那个批处理在C纯DOS下是无法运行的
作者: qingyangecho     时间: 2006-11-2 22:55
VM中是一个空系统,因为旧系统前两天刚被我删了还没有安装新的系统
一楼的那一帖是我从VM绿色版中找出来的,想根据这一个批处理改成自己需要的.所以没有COLOR OA这个命令
我所说的并不是执行第一条命令后跳出批处理,而是直接运行第一条命令.简单的说就是根本不让我选择.还有还有,如果是AUTOEXEC.BAT自运行批处理那倒好办了,只要配合CONFIG.SYS就可以有选择项了,问题是这只是一个普通的批处理,是在启动DOS后在需要的时候才手动输入启动的
作者: qingyangecho     时间: 2006-11-2 22:59
这个才是我想用的批处理

@ECHO OFF
CLS
GOTO MENU

:MENU
ECHO.
ECHO.               =-=-=-=-=-=-=-=--=-=-=--=-=-=--=-=-=-=
ECHO.
ECHO.
ECHO.
ECHO.                1  Restore F11 message and function.
ECHO.
ECHO.         2  Suppress F11 message but retain the F11 function.
ECHO.  
ECHO.                3  Disable F11 message and function.
ECHO.
ECHO.
ECHO.                        4       E X I T
ECHO.
ECHO.
ECHO.
ECHO.
ECHO.               =-=-=-=-=-=-=-=--=-=-=--=-=-=--=-=-=-=
ECHO.


w:\CHOICE.com /N /C:1234 please select 1/2/3/4....:
IF ERRORLEVEL 1 IF NOT ERRORLEVEL 2 GOTO RESTORE
IF ERRORLEVEL 2 IF NOT ERRORLEVEL 3 GOTO SUPPRESS
IF ERRORLEVEL 3 IF NOT ERRORLEVEL 4 GOTO DISABLE
IF ERRORLEVEL 4 IF NOT ERRORLEVEL 5 GOTO restort
PAUSE


:RESTORE
echo.1
pause
copy BMGRUS.BA1 BMGRUS.SCR
W:\bmgr.exe /Fboot.bin /Mbmgr%CC%.scr /s
GOTO EXIT

:SUPPRESS
echo.2
pause
fdisk/mbr
copy BMGRUS.BA2 BMGRUS.SCR
W:\bmgr.exe /Fboot.bin /Mbmgr%CC%.scr /s
type bmgrus.scr
pause
GOTO EXIT

:DISABLE
echo.3
pause
fdisk/mbr
GOTO EXIT

:restort
restort.com

:EXIT
del BMGRUS.SCR
Echo Remove the diskette and press CTRL-ALT-DEL to restart the computer.
作者: fastslz     时间: 2006-11-2 23:08
98启动盘里用的CHOICE
附件 1: choice.rar (2006-11-2 23:08, 2.83 K, 下载附件所需积分 1点 ,下载次数: 11)

作者: qingyangecho     时间: 2006-11-2 23:17
下载了你的这一份比较一下,不管是CRC32还是修改时间,都和我早先下载来的版本的数值是一样的
作者: fastslz     时间: 2006-11-2 23:33
CHOICE /N /C:12345678 /T:1,60 按数字键(1~8)选择启动项
rem (停留60秒默认启动1)
作者: qingyangecho     时间: 2006-11-3 00:02


  Quote:
Originally posted by fastslz at 2006-11-2 11:33 PM:
CHOICE /N /C:12345678 /T:1,60 按数字键(1~8)选择启动项
rem (停留60秒默认启动1)



VM中依然是出现这个提示,不管选择哪一顶,依然执行第一条
作者: ljs3509     时间: 2006-11-3 02:30
应该是调用了系统变量。

看看这个有没有帮助

下表列出 Windows XP 的系统和局部环境变量。

变量 类型 说明
%ALLUSERSPROFILE% 局部 返回所有“用户配置文件”的位置。
%APPDATA% 局部 返回默认情况下应用程序存储数据的位置。
%CD% 局部 返回当前目录字符串。
%CMDCMDLINE% 局部 返回用来启动当前的 Cmd.exe 的准确命令行。
%CMDEXTVERSION% 系统 返回当前的“命令处理程序扩展”的版本号。
%COMPUTERNAME%  系统 返回计算机的名称。
%COMSPEC%  系统 返回命令行解释器可执行程序的准确路径。
%DATE%  系统 返回当前日期。使用与 date /t 命令相同的格式。由 Cmd.exe 生成。有关 date 命令的详细信息,请参阅 Date。
%ERRORLEVEL%  系统 返回最近使用过的命令的错误代码。通常用非零值表示错误。
%HOMEDRIVE%  系统 返回连接到用户主目录的本地工作站驱动器号。基于主目录值的设置。用户主目录是在“本地用户和组”中指定的。
%HOMEPATH%  系统 返回用户主目录的完整路径。基于主目录值的设置。用户主目录是在“本地用户和组”中指定的。
%HOMESHARE%  系统 返回用户的共享主目录的网络路径。基于主目录值的设置。用户主目录是在“本地用户和组”中指定的。
%LOGONSEVER%  局部 返回验证当前登录会话的域控制器的名称。
%NUMBER_OF_PROCESSORS%  系统 指定安装在计算机上的处理器的数目。
%OS%  系统 返回操作系统的名称。Windows 2000 将操作系统显示为 Windows_NT。
%PATH% 系统 指定可执行文件的搜索路径。
%PATHEXT% 系统 返回操作系统认为可执行的文件扩展名的列表。
%PROCESSOR_ARCHITECTURE%  系统 返回处理器的芯片体系结构。值: x86,IA64。
%PROCESSOR_IDENTFIER% 系统 返回处理器说明。
%PROCESSOR_LEVEL%  系统 返回计算机上安装的处理器的型号。
%PROCESSOR_LEVEL% 系统 返回处理器的版本号。
%PROMPT% 局部 返回当前解释程序的命令提示符设置。由 Cmd.exe 生成。
%RANDOM% 系统 返回 0 到 32767 之间的任意十进制数字。由 Cmd.exe 生成。
%SYSTEMDRIVE% 系统 返回包含 Windows XP 根目录(即系统根目录)的驱动器。
%SYSTEMROOT%  系统 返回 Windows XP 根目录的位置。
%TEMP% and %TMP% 系统和用户 返回对当前登录用户可用的应用程序所使用的默认临时目录。有些应用程序需要 TEMP,而其它应用程序则需要 TMP。
%TIME% 系统 返回当前时间。使用与 time /t 命令相同的格式。由 Cmd.exe 生成。有关 time 命令的详细信息,请参阅 Time。
%USERDOMAIN% 局部 返回包含用户帐户的域的名称。
%USERNAME% 局部 返回当前登录的用户的名称。
%UserPrefix% 局部 返回当前用户的配置文件的位置。
%WINDIR% 系统 返回操作系统目录的位置。
作者: lxmxn     时间: 2006-11-3 06:23

  楼上的关于环境变量的,有两个地方需要指正一下:

  Quote:
%PROCESSOR_LEVEL%  系统 返回计算机上安装的处理器的型号。
%PROCESSOR_LEVEL% 系统 返回处理器的版本号。

  这两个重复了,其中有一个是"%PROCESSOR_REVISION%"----系统-----返回处理器修订号的系统变量。

  Quote:
%TIME% 系统 返回当前时间。使用与 time /t 命令相同的格式。由 Cmd.exe 生成。有关 time 命令的详细信息,请参阅 Time。

  %TIME%返回的并非与"time /t"命令相同格式的信息,"time /t"只显示的是小时以及分钟数,并没有%TIME%返回的值精确。


作者: redtek     时间: 2006-11-3 06:34
lxmxn的细致认真助人和ljs3509的热情值得学习~:)
作者: namejm     时间: 2006-11-3 06:40


  Quote:
Originally posted by redtek at 2006-11-3 06:34:
lxmxn的细致认真助人和ljs3509的热情值得学习~:)

  redtek给好同志加了分要大张旗鼓地宣扬一番,这样才能起到激励的作用,否则,别人被加了分都还浑然未觉呢——偶也是被加了分的,一激动就跑来给 redtek 扎起了——看,这就是被加分的效果啊
作者: redtek     时间: 2006-11-3 06:48
哈哈……多谢版主夸奖~:)
作者: vkill     时间: 2006-11-3 07:14
喜欢用set/p
作者: fastslz     时间: 2006-11-3 08:03
好像都混淆了楼主说的应该是纯DOS模式,楼主改用Wbat 2.50吧DOS、XP通用的,只是不支持936代码页
http://home.mnet-online.de/horst.muc/
作者: qingyangecho     时间: 2006-11-3 10:08
谢谢楼上各位
安全通过.删除了部分参数和更改了部分变量就成了,不知道是啥原因

CHOICE.com /C:1234
IF ERRORLEVEL 1 GOTO RESTORE
IF ERRORLEVEL 2 GOTO SUPPRESS
IF ERRORLEVEL 3 GOTO DISABLE
IF ERRORLEVEL 4 GOTO restort
作者: fastslz     时间: 2006-11-3 11:09
还真奇怪了我是一直用IF ERRORLEVEL 1 IF NOT ERRORLEVEL 2参数的,数字排列从小到大

楼上的代码,应该从大到小
CHOICE.com /C:1234
IF ERRORLEVEL 4 GOTO RESTORE
IF ERRORLEVEL 3 GOTO SUPPRESS
IF ERRORLEVEL 2 GOTO DISABLE
IF ERRORLEVEL 1 GOTO restort
作者: qingyangecho     时间: 2006-11-3 13:14
刚开始的时候我也是从大到小排列的,可是在VM中却出错,按二给三,按三给二(在二十楼的那个批处理的每一个命令组里我特意多加了一个暂停和一个数字就是为了看这个).从小到大就按多少给多少.只能过两天收集完全部的软件后再刻盘到实机中实验确认了
作者: ljs3509     时间: 2006-11-4 03:34


  Quote:
Originally posted by lxmxn at 2006-11-3 06:23:

  楼上的关于环境变量的,有两个地方需要指正一下:

  这两个重复了,其中有一个是"%PROCESSOR_REVISION%"----系统-----返回 ...

谢谢指正。这是我从XP帮助和支持中心里复制过来的。没太仔细看
作者: wjh800     时间: 2007-4-24 02:23
学习!