标题: [文本处理] [已解决]set/p命令如何让用户输入时,只能输入特定的值 [打印本页]
作者: laminor 时间: 2017-9-19 21:30 标题: [已解决]set/p命令如何让用户输入时,只能输入特定的值
本帖最后由 laminor 于 2017-9-20 20:12 编辑
比如这个批处理,输入值为1.2.3.4时都可以执行相应操作,但是当输入其他值或输入为空时,仍然会出现输入为1,怎么让输入的值为其他或空值时显示输入错误- @echo off
- :menu
- set aa=
- set /p aa=请输入数字:
- if %aa% equ 1 goto 1
- if %aa% equ 2 goto 2
- if %aa% equ 3 goto 3
- if %aa% equ 4 goto 4
- echo.
- :1
- echo 输入为1
- pause
- goto menu
- :2
- echo 输入为2
- pause
- goto menu
- :3
- echo 输入为3
- pause
- goto menu
- :4
- echo 输入为4
- pause
- 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。。是变量延迟,可以解决输入为“的情况- @echo off
- Setlocal enabledelayedexpansion
- :menu
- cls
- set aa=
- set /p aa=请输入数字:
- if not defined aa echo 输入错误&pause&goto menu
- if !aa! equ 1 goto 1
- if !aa! equ 2 goto 2
- if !aa! equ 3 goto 3
- if !aa! equ 4 (goto 4) else (echo 输入错误&pause&goto menu)
- echo.
- :1
- echo 输入为1
- pause
- goto menu
- :2
- echo 输入为2
- pause
- goto menu
- :3
- echo 输入为3
- pause
- goto menu
- :4
- echo 输入为4
- pause
- goto menu
复制代码
帮你简写一下,仅做参考。。效果是一样的- @echo off
- :menu
- Setlocal enabledelayedexpansion
- cls&set aa=&set s=0&set /p aa=请输入数字:
- if not defined aa echo 输入错误&pause&goto menu
- for /l %%i in (1,1,4) do (if !aa! equ %%i (echo 输入为%%i&pause&goto menu) )
- 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
这是修改过的代码,你可以试下,可以应对空格和双引号"这样的特殊字符- @echo off
- setlocal enabledelayedexpansion
- :menu
- cls
- set aa=
- set /p aa=请输入数字:
- if !aa! equ 1 goto 1
- if !aa! equ 2 goto 2
- if !aa! equ 3 goto 3
- if !aa! equ 4 goto 4
- echo 输入错误
- pause >nul&goto menu
- :1
- echo 输入为1
- pause >nul&goto menu
- :2
- echo 输入为2
- pause >nul&goto menu
- :3
- echo 输入为3
- pause >nul&goto menu
- :4
- echo 输入为4
- 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://bbs.bathome.net/) |
Powered by Discuz! 7.2 |