[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[其他] 批处理多选菜单判断分组问题

  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 第三组

用什么方法判断呢?

也就是输出 你输入的最后一个字母 所在的组数

TOP

  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
复制代码
偷懒钻空子,考虑到一般输入选择字母都是按字母表顺序输入,所以倒过来从最后一个字母开始依次从第三组到第一组筛选判断。所以是不严谨的代码

TOP

  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
复制代码

TOP

返回列表