标题: [其他] 批处理多选菜单判断分组问题 [打印本页]
作者: zhaofeng0420 时间: 2017-9-15 19:44 标题: 批处理多选菜单判断分组问题
- @ECHO OFF
- ECHO A. 广东 B. 广西 C. 福建 D. 海南 E. 江苏 F. 浙江 G. 台湾
- ECHO H. 上海 I. 河南 J. 湖北 K. 安徽 L. 江西 M. 湖南
- ECHO N. 西藏 O. 甘肃 P. 青海
- ECHO.
- 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
- @echo off
- setlocal enabledelayedexpansion
- set .1=ABCDEFG
- set .2=HIJKLM
- set .3=NOP
- echo;A. 广东 B. 广西 C. 福建 D. 海南 E. 江苏 F. 浙江 G. 台湾
- echo;H. 上海 I. 河南 J. 湖北 K. 安徽 L. 江西 M. 湖南
- echo;N. 西藏 O. 甘肃 P. 青海
- echo;&set /p start=请选择:
- for /l %%a in (1 1 26) do (
- set "zifu=!start:~-%%a,1!"
- for %%b in (3 2 1) do set.%%b|find/i "!zifu!">nul 2>nul&&(echo;第%%b组&goto end)
- )
- :end
- pause>nul&exit /b
复制代码
偷懒钻空子,考虑到一般输入选择字母都是按字母表顺序输入,所以倒过来从最后一个字母开始依次从第三组到第一组筛选判断。所以是不严谨的代码
作者: slore 时间: 2017-9-17 12:24
- @echo off
- setlocal enabledelayedexpansion
- set _p1=A. 广东 B. 广西 C. 福建 D. 海南 E. 江苏 F. 浙江 G. 台湾
- set _p2=H. 上海 I. 河南 J. 湖北 K. 安徽 L. 江西 M. 湖南
- set _p3=N. 西藏 O. 甘肃 P. 青海
- echo.%_p1%&echo.%_p2%&echo.%_p3%&echo.
- set /p prov=请选择:
- set /a i=1
- for /f %%a in ('set _p') do (
- call :prov_group "%prov%"
- if !pg_ret! NEQ -1 goto :found
- )
-
- :notfound
- echo 输入错误,请重新选择.
- pause>nul&exit /b
-
- :found
- echo 第%pg_ret%组
- pause>nul&exit /b
-
-
- :prov_group
- set pg_ret=-1
- set pg_p=%~1
- set tmp=!_p%i%:%pg_p%.=!
- if not "x%tmp%"=="x!_p%i%!" set pg_ret=%i%&&goto :EOF
- set /a i+=1
- goto :EOF
复制代码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |