Board logo

标题: [文本处理] [已解决]set/p命令如何让用户输入时,只能输入特定的值 [打印本页]

作者: laminor    时间: 2017-9-19 21:30     标题: [已解决]set/p命令如何让用户输入时,只能输入特定的值

本帖最后由 laminor 于 2017-9-20 20:12 编辑

比如这个批处理,输入值为1.2.3.4时都可以执行相应操作,但是当输入其他值或输入为空时,仍然会出现输入为1,怎么让输入的值为其他或空值时显示输入错误
  1. @echo off
  2. :menu
  3. set aa=
  4. set /p aa=请输入数字:
  5. if %aa% equ 1 goto 1
  6. if %aa% equ 2 goto 2
  7. if %aa% equ 3 goto 3
  8. if %aa% equ 4 goto 4
  9. echo.
  10. :1
  11. echo 输入为1
  12. pause
  13. goto menu
  14. :2
  15. echo 输入为2
  16. pause
  17. goto menu
  18. :3
  19. echo 输入为3
  20. pause
  21. goto menu
  22. :4
  23. echo 输入为4
  24. pause
  25. goto menu
复制代码

作者: 老刘1号    时间: 2017-9-19 23:18

发帖前能否先使用论坛搜索?
这种问题我都回答了不下5个-_-#
作者: 不知道是谁    时间: 2017-9-19 23:45

批处理是一条一条往下执行的,输入一个不在判断列表中的数字肯定会继续往下执行标签1的内容
可以多搜索一下,看看别人的选择菜单是怎么写的,拿来参考

if %aa% equ 4 goto 4
echo 输入错误
goto menu

作者: laminor    时间: 2017-9-19 23:59

本帖最后由 laminor 于 2017-9-20 00:01 编辑

回复 3# 不知道是谁


    加了之后试了一下
运行时先输入4,返回正常,再输入空值时就自动退出了,这是为什么?
作者: 1055367558    时间: 2017-9-20 09:53

本帖最后由 1055367558 于 2017-9-21 17:53 编辑

顺便给你讲一下if。。else的应用。。大概就是:if命令格式可写为if 判断条件 (成立时命令系列) else (不成立时命令系列)
详细的可以自行百度一下
if not defined是检测是否存在变量。可以解决输入为空的情况
而那条长的固定代码Setlocal enabledelayedexpansion。。是变量延迟,可以解决输入为“的情况
  1. @echo off
  2. Setlocal enabledelayedexpansion
  3. :menu
  4. cls
  5. set aa=
  6. set /p aa=请输入数字:
  7. if not defined aa echo 输入错误&pause&goto menu
  8. if !aa! equ 1 goto 1
  9. if !aa! equ 2 goto 2
  10. if !aa! equ 3 goto 3
  11. if !aa! equ 4 (goto 4) else (echo 输入错误&pause&goto menu)
  12. echo.
  13. :1
  14. echo 输入为1
  15. pause
  16. goto menu
  17. :2
  18. echo 输入为2
  19. pause
  20. goto menu
  21. :3
  22. echo 输入为3
  23. pause
  24. goto menu
  25. :4
  26. echo 输入为4
  27. pause
  28. goto menu
复制代码
帮你简写一下,仅做参考。。效果是一样的
  1. @echo off
  2. :menu
  3. Setlocal enabledelayedexpansion
  4. cls&set aa=&set s=0&set /p aa=请输入数字:
  5. if not defined aa echo 输入错误&pause&goto menu
  6. for /l %%i in (1,1,4) do (if !aa! equ %%i (echo 输入为%%i&pause&goto menu) )
  7. if !s! equ 0 echo 输入错误&pause&goto menu
复制代码
觉得好的话下面评个技术分+1。。
作者: 不知道是谁    时间: 2017-9-20 18:16

回复 4# laminor

你可以看下我的这个帖子
http://www.bathome.net/thread-45397-1-1.html

这是修改过的代码,你可以试下,可以应对空格和双引号"这样的特殊字符
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. :menu
  4. cls
  5. set aa=
  6. set /p aa=请输入数字:
  7. if !aa! equ 1 goto 1
  8. if !aa! equ 2 goto 2
  9. if !aa! equ 3 goto 3
  10. if !aa! equ 4 goto 4
  11. echo 输入错误
  12. pause >nul&goto menu
  13. :1
  14. echo 输入为1
  15. pause >nul&goto menu
  16. :2
  17. echo 输入为2
  18. pause >nul&goto menu
  19. :3
  20. echo 输入为3
  21. pause >nul&goto menu
  22. :4
  23. echo 输入为4
  24. pause >nul&goto menu
复制代码

作者: 不知道是谁    时间: 2017-9-20 18:24

回复 5# 1055367558


    简写的代码有一定的局限性,有点取巧了,如果每个标签输出的是不同的命令你这代码就没用了
作者: 1055367558    时间: 2017-9-20 19:48

回复 7# 不知道是谁

抱歉什么叫"“每个标签输出的是不同的命令你这代码就没用了”,,我试过了都好的呀
作者: laminor    时间: 2017-9-20 19:58

本帖最后由 laminor 于 2017-9-20 20:02 编辑

回复 8# 1055367558


    他的意思是如果1234四个标签对应得是四个不同的命令的话,简写的那个代码就没用了,因为简写的代码把四个标签用一个命令输出了
作者: laminor    时间: 2017-9-20 20:07

本帖最后由 laminor 于 2017-9-20 20:26 编辑

回复 5# 1055367558


    虽然加了变量延迟,但是并没有解决输入为"或空格的问题
我是指没有简写的代码

把%aa%改成!aa!就可以了,改的时候可能没注意,谢谢




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