找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 25825|回复: 6

[其他] 批处理怎样用choice来选择?

[复制链接]
发表于 2011-6-27 17:47:00 | 显示全部楼层 |阅读模式
输入g     则显示good
输入b    则显示bad



@echo off
:aa
cls
echo                 please input good or bad
                           
choice /c gb /m input:
pause
if /i "choice"=="g" (goto bb) else (if /i "choice"=="b" goto cc)

:bb
echo good
echo.
pause
  goto aa
:cc
echo bad
echo.
pause
  goto aa
pause
这段不论是输入g还是b都是显示good
哪错了

评分

参与人数 1PB -2 收起 理由
batman -2 当代码不止一行,请用code标签括起

查看全部评分

发表于 2011-6-27 18:19:41 | 显示全部楼层
choice 完之后,用 ERRORLEVEL 来判断。
choice /c gb /m input
if %ERRORLEVEL% equ 1 echo,b
if %ERRORLEVEL% equ 2 echo,g

ERRORLEVEL的值>1就是正常选择,值是按照/C的顺序来的, b排在第一个位置,如果按了b,就返回1.
 楼主| 发表于 2011-6-28 08:00:58 | 显示全部楼层
哪个errorlevel可不可以用其他来代替 例如 a    b  c
发表于 2011-6-28 08:07:16 | 显示全部楼层
本帖最后由 batman 于 2011-6-28 08:13 编辑

给个示例你吧:

  1. @echo off&setlocal enabledelayedexpansion
  2. set "str=0 1 2 3 4 5 6 7 8 9 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 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"
  3. for %%a in (%str%) do set /a n+=1&set ".!n!=%%a"
  4. :lp
  5. for /l %%a in (1,1,9) do (
  6.     cls&set /p=请输入八位由数字和字母组成的密码,请注意大小写:<nul
  7.     if defined pwds set /p=!pwds!<nul
  8.     if %%a neq 9 (
  9.        choice /n /cs /c %str: =%
  10.        set "pwds=!pwds!*"&call,set "pwd=!pwd!%%.!errorlevel!%%"
  11.     )
  12. )
  13. echo,&echo,&echo %pwd%
  14. if "%pwd%" equ "BatHomes" (
  15.    echo 密码正确
  16.   ) else (
  17.    echo 密码错误
  18. )
  19. pause>nul
复制代码
同时建议楼主好好看看这个贴子:
http://www.bathome.net/viewthrea ... mp;highlight=choice
发表于 2011-7-1 17:12:49 | 显示全部楼层
1# ml999
  1. @echo off
  2. :aa
  3. cls
  4. echo                 please input good or bad
  5. choice /c gb /m input:
  6. if errorlevel 1 goto bb
  7. if errorlevel 2 goto cc
  8. :bb
  9. echo good
  10. echo.
  11. pause
  12.   goto aa
  13. :cc
  14. echo bad
  15. echo.
  16. pause
  17.   goto aa
  18. pause
复制代码
楼主还没明白choice的基本用法。choice是有返回值的,如果你把它当变量用,那还不如用set /p 命令更直接些。
发表于 2011-7-1 17:15:12 | 显示全部楼层
我开始还觉得choice命令华而不实,还不如set /p ,现在才醒过来——choice不要按回车。
发表于 2011-7-1 17:21:40 | 显示全部楼层
3# ml999
errorlevel是返回值的变量名,系统规定。——你这么问就像是问,md c:\hello 将md改为tmd 可不可以建立文件夹一样。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 14:12 , Processed in 0.022267 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表