Board logo

标题: [其他] 批处理多选菜单判断分组问题 [打印本页]

作者: zhaofeng0420    时间: 2017-9-15 19:44     标题: 批处理多选菜单判断分组问题

  1. @ECHO OFF
  2. ECHO A. 广东 B. 广西 C. 福建 D. 海南 E. 江苏 F. 浙江 G. 台湾
  3. ECHO H. 上海 I. 河南 J. 湖北 K. 安徽 L. 江西 M. 湖南
  4. ECHO N. 西藏 O. 甘肃 P. 青海
  5. ECHO.
  6. SET /P START=请选择:
复制代码
A,B,C,D,E,F,G 为第一组;H,I,J,K,L,M 为第二组;N,O,P 为第三组。(每一组数量不定,可增加或减少)
要求:输入的字符存在于第一组,则输出 第一组; 输入的字符存在于第二组,则输出 第二组;输入的字符存在于第一组和第二组,则输出 第二组;以此类推。
如:
请选择:A,D,F            则 ECHO 第一组
请选择:J,M                则 ECHO 第二组
请选择:D,F,H             则 ECHO 第二组
请选择:B,G,K,N,P       则 ECHO 第三组

用什么方法判断呢?

作者: 再世情緣    时间: 2017-9-16 19:48

也就是输出 你输入的最后一个字母 所在的组数
作者: taofan712    时间: 2017-9-16 20:39

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set .1=ABCDEFG
  4. set .2=HIJKLM
  5. set .3=NOP
  6. echo;A. 广东 B. 广西 C. 福建 D. 海南 E. 江苏 F. 浙江 G. 台湾
  7. echo;H. 上海 I. 河南 J. 湖北 K. 安徽 L. 江西 M. 湖南
  8. echo;N. 西藏 O. 甘肃 P. 青海
  9. echo;&set /p start=请选择:
  10. for /l %%a in (1 1 26) do (
  11.   set "zifu=!start:~-%%a,1!"
  12.   for %%b in (3 2 1) do set.%%b|find/i "!zifu!">nul 2>nul&&(echo;第%%b组&goto end)
  13. )
  14. :end
  15. pause>nul&exit /b
复制代码
偷懒钻空子,考虑到一般输入选择字母都是按字母表顺序输入,所以倒过来从最后一个字母开始依次从第三组到第一组筛选判断。所以是不严谨的代码
作者: slore    时间: 2017-9-17 12:24

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set _p1=A. 广东 B. 广西 C. 福建 D. 海南 E. 江苏 F. 浙江 G. 台湾
  4. set _p2=H. 上海 I. 河南 J. 湖北 K. 安徽 L. 江西 M. 湖南
  5. set _p3=N. 西藏 O. 甘肃 P. 青海
  6. echo.%_p1%&echo.%_p2%&echo.%_p3%&echo.
  7. set /p prov=请选择:
  8. set /a i=1
  9. for /f %%a in ('set _p') do (
  10.     call :prov_group "%prov%"
  11.     if !pg_ret! NEQ -1 goto :found
  12. )
  13. :notfound
  14. echo 输入错误,请重新选择.
  15. pause>nul&exit /b
  16. :found
  17. echo 第%pg_ret%组
  18. pause>nul&exit /b
  19. :prov_group
  20. set pg_ret=-1
  21. set pg_p=%~1
  22. set tmp=!_p%i%:%pg_p%.=!
  23. if  not "x%tmp%"=="x!_p%i%!" set pg_ret=%i%&&goto :EOF
  24. set /a i+=1
  25. goto :EOF
复制代码





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