Board logo

标题: [文本处理] (已解决)批处理如何获取choice用户输入的数字? [打印本页]

作者: maghreb    时间: 2020-11-4 13:26     标题: (已解决)批处理如何获取choice用户输入的数字?

本帖最后由 maghreb 于 2020-11-15 17:20 编辑

背景:用户输入进入同一跳转进行安装(或其他操作),那么需要根据用户输入(只能输入要求的如/c:123456789。。。等整数字)的变量,对跳转后同一标签内的安装内容按此变量进行调整以满足不同安装要求,这样可以省很多代码(否则要重复很多标签代码进行安装),如下:
choice /c:123456789 /n /m "输入你的选择 :"
。。。
if errorlevel 4 goto :install
if errorlevel 3 goto install
if errorlevel 2 goto :install
if errorlevel 1 goto :install

请教:1、如何获取choice用户输入的数字变量?
         2、数字9之后该如何表达?如10、11、12。。。(可能有二三十个


非常谢谢!
作者: yhcfsr    时间: 2020-11-4 15:00

  1. set /p "ch=请输入你的选择:"
  2. if "%ch%"=="1" goto :install
  3. if "%ch%"=="2" goto :install
  4. .......
  5. if "%ch%"=="100" goto :install
复制代码

作者: maghreb    时间: 2020-11-4 16:10

这个可以,但是如何把下面100行,简化成一行,这是难点
作者: qixiaobin0715    时间: 2020-11-4 16:31

回复 3# maghreb
  1. set /p "ch=请输入你的选择:"
  2. if %ch% geq 1 if %ch% leq 100 goto :install
复制代码

作者: Batcher    时间: 2020-11-4 16:34

回复 3# maghreb


    请说一下真实的需求吧,不要举一些没有代表性的例子。既然要写成一行不管输入啥都是 goto :install 那么为啥还要做这个判断呢?
作者: maghreb    时间: 2020-11-4 16:42

回复 4# qixiaobin0715

这样容易输入小数,会导致安装错误
作者: maghreb    时间: 2020-11-4 16:47

回复 5# Batcher


    就是我要做一个提取工具,按我做的列表文件进行提取,列表文件可以是123456。。。100。标签里的提取代码是一样的,可以用变量,所以需要按输入的多少数字(必须是整数)来获取这个变量,而去按那个列表文件进行执行提取

如果不是整数,可以写成
:main
set /p input=请输入1至100的数字:
if %input% GTR 1 ( if %input% LSS 100  goto :install )
goto main
::install
作者: yhcfsr    时间: 2020-11-4 16:56     标题: 更新

本帖最后由 yhcfsr 于 2020-11-4 20:04 编辑
  1. @echo off
  2. :main
  3. set /p "ch=请输入你的选择:"
  4. echo;%ch%|findstr /r "[^0-9]"&&echo;输出错误&&goto :main||if %ch% gtr 30 echo;输出错误&&goto :main
  5. goto :install%ch%
  6. pause&&exit
  7. :install0 //这是第0个分支
  8. echo;%ch%
  9. pause
  10. exit /b
  11. :install1 //这是第1个分支
  12. echo;%ch%
  13. pause
  14. exit /b
  15. :install2 //这是第2个分支
  16. echo;%ch%
  17. pause
  18. exit /b
  19. .....
  20. :install30 //这是第30个分支
  21. echo;%ch%
  22. pause
  23. exit /b
复制代码

作者: Batcher    时间: 2020-11-4 16:57

回复 7# maghreb


    可否举例说明一下7楼这段代码跟你想实现的功能有何差异?
作者: qixiaobin0715    时间: 2020-11-4 17:00

本帖最后由 qixiaobin0715 于 2020-11-4 19:31 编辑

回复 6# maghreb

用findstr判断一下:
  1. :a
  2. set /p "ch=请输入你的选择:"
  3. echo %ch%|findstr /be "[1-9][0-9]*" >nul ||echo 你的输入有误,请重新输入&& goto :a
  4. if %ch% leq 100 (goto :install) else (echo 你的输入有误,请重新输入&& goto :a)
复制代码

作者: yhcfsr    时间: 2020-11-4 17:27

回复 8# yhcfsr


   不能再简单了,否则你就得一个个if的写
作者: qixiaobin0715    时间: 2020-11-4 19:34

回复 8# yhcfsr

输入0呢?
作者: yhcfsr    时间: 2020-11-4 19:58

本帖最后由 yhcfsr 于 2020-11-4 20:07 编辑

回复 12# qixiaobin0715


    看8楼更新,当学会举一反三
作者: qixiaobin0715    时间: 2020-11-4 21:05

我是说按楼主的要求,0是非法的
作者: yhcfsr    时间: 2020-11-4 21:17

回复 14# qixiaobin0715


    那就不清楚了,WIN10测试没问题
作者: maghreb    时间: 2020-11-4 21:51

感谢两位大神的思路,均解决了我的问题再次感谢
作者: qixiaobin0715    时间: 2020-11-4 21:51

测试当然是没问题,可能是我表达有问题,输入数字是从1开始的,而不是0.
作者: maghreb    时间: 2020-11-6 07:49

回复 11# yhcfsr

set /p select=输入你的选择:
if "%select%"=="0" goto :mainmenu
echo %select%|findstr /r "[^0-9]"&&goto :mainmenu||if %select% gtr 50 goto :mainmenu
goto :install

刚才试了一下,qixiaobin0715兄的执行有效,但不能输入个位,我综合两位的意见, 修改后可以正确达到要求,感谢两位大神
作者: qixiaobin0715    时间: 2020-11-7 10:46

本帖最后由 qixiaobin0715 于 2020-11-7 15:53 编辑

回复 18# maghreb

我想你是指不能输入1到9这九个数字吧,可能是你抄代码时漏下了“*”,看清楚了是[1-9][0-9]*。我这里测试没问题。
另外也可以将判断写成一行:
  1. :a
  2. set /p "ch=请输入你的选择:"
  3. echo %ch%|findstr /v /be "[1-9][0-9]*" >nul&&echo 输入有误重输&& goto :a||if %ch% gtr 100 (echo 输入有误重输&& goto :a) else (goto :b)
复制代码





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