Board logo

标题: [其他] 批处理怎样用choice来选择? [打印本页]

作者: ml999    时间: 2011-6-27 17:47     标题: 批处理怎样用choice来选择?

输入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
哪错了
作者: caruko    时间: 2011-6-27 18:19

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.
作者: ml999    时间: 2011-6-28 08:00

哪个errorlevel可不可以用其他来代替 例如 a    b  c
作者: batman    时间: 2011-6-28 08:07

本帖最后由 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
作者: Hello123World    时间: 2011-7-1 17:12

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 命令更直接些。
作者: Hello123World    时间: 2011-7-1 17:15

我开始还觉得choice命令华而不实,还不如set /p ,现在才醒过来——choice不要按回车。
作者: Hello123World    时间: 2011-7-1 17:21

3# ml999
errorlevel是返回值的变量名,系统规定。——你这么问就像是问,md c:\hello 将md改为tmd 可不可以建立文件夹一样。




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2