找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 82369|回复: 18

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

[复制链接]
发表于 2020-11-4 13:26:13 | 显示全部楼层 |阅读模式
本帖最后由 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。。。(可能有二三十个


非常谢谢!
发表于 2020-11-4 15:00:24 | 显示全部楼层
  1. set /p "ch=请输入你的选择:"
  2. if "%ch%"=="1" goto :install
  3. if "%ch%"=="2" goto :install
  4. .......
  5. if "%ch%"=="100" goto :install
复制代码
 楼主| 发表于 2020-11-4 16:10:23 | 显示全部楼层
这个可以,但是如何把下面100行,简化成一行,这是难点
发表于 2020-11-4 16:31:47 | 显示全部楼层
回复 3# maghreb
  1. set /p "ch=请输入你的选择:"
  2. if %ch% geq 1 if %ch% leq 100 goto :install
复制代码
发表于 2020-11-4 16:34:28 | 显示全部楼层
回复 3# maghreb


    请说一下真实的需求吧,不要举一些没有代表性的例子。既然要写成一行不管输入啥都是 goto :install 那么为啥还要做这个判断呢?
 楼主| 发表于 2020-11-4 16:42:00 | 显示全部楼层
回复 4# qixiaobin0715

这样容易输入小数,会导致安装错误
 楼主| 发表于 2020-11-4 16:47:27 | 显示全部楼层
回复 5# Batcher


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

如果不是整数,可以写成
:main
set /p input=请输入1至100的数字:
if %input% GTR 1 ( if %input% LSS 100  goto :install )
goto main
::install
发表于 2020-11-4 16:56:14 | 显示全部楼层

更新

本帖最后由 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
复制代码

评分

参与人数 1技术 +1 收起 理由
maghreb + 1 谢谢大神

查看全部评分

发表于 2020-11-4 16:57:20 | 显示全部楼层
回复 7# maghreb


    可否举例说明一下7楼这段代码跟你想实现的功能有何差异?
发表于 2020-11-4 17:00:50 | 显示全部楼层
本帖最后由 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)
复制代码

评分

参与人数 1技术 +1 收起 理由
maghreb + 1 谢谢大神

查看全部评分

发表于 2020-11-4 17:27:46 | 显示全部楼层
回复 8# yhcfsr


   不能再简单了,否则你就得一个个if的写
发表于 2020-11-4 19:34:13 | 显示全部楼层
回复 8# yhcfsr

输入0呢?
发表于 2020-11-4 19:58:55 | 显示全部楼层
本帖最后由 yhcfsr 于 2020-11-4 20:07 编辑

回复 12# qixiaobin0715


    看8楼更新,当学会举一反三
发表于 2020-11-4 21:05:41 | 显示全部楼层
我是说按楼主的要求,0是非法的
发表于 2020-11-4 21:17:43 | 显示全部楼层
回复 14# qixiaobin0715


    那就不清楚了,WIN10测试没问题
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-20 05:55 , Processed in 0.023610 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表