[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[其他] [已解决]选项有N个时批处理if语句如何写才能高效?

下面是自已写的一个练习,这个练习在测试时发现如下的问题,
  1. @echo off
  2. echo 选项:1.A  2.B  3.C  4.D  5.E
  3. echo.
  4. :loop
  5. set /p input=请输入你的选项并回车确认:
  6. if %input% lss 6 (goto %input%) else (echo 你的输入不合要求请重新选择! &goto loop)
  7. :1
  8. echo abx.....
  9. pause
  10. goto :eof
  11. :2
  12. echo jki....
  13. pause
  14. goto :eof
  15. :3
  16. echo qwe....
  17. pause
  18. goto :eof
  19. :4
  20. echo 123....
  21. pause
  22. goto :eof
  23. :5
  24. echo 789....
  25. pause
  26. goto :eof
复制代码
当用户输入标点符号或是数字0或是其它的时候,goto %input% 由于找不到跳转标记,则批处就会自己退出了。

为了更好的过滤if语句的判断条件,于是我把上例修改变成下面的
  1. @echo off
  2. echo 选项:1.A  2.B  3.C  4.D  5.E
  3. echo.
  4. :loop
  5. set /p input=请输入你的选项并回车确认:
  6. if %input%==1 (goto %input%)
  7. if %input%==2 (goto %input%)
  8. if %input%==3 (goto %input%)
  9. if %input%==4 (goto %input%)
  10. if %input%==5 (goto %input%)
  11. echo 你的输入不合要求请重新选择!
  12. goto loop
  13. :1
  14. echo abx.....
  15. pause
  16. goto :eof
  17. :2
  18. echo jki....
  19. pause
  20. goto :eof
  21. :3
  22. echo qwe....
  23. pause
  24. goto :eof
  25. :4
  26. echo 123....
  27. pause
  28. goto :eof
  29. :5
  30. echo 789....
  31. pause
  32. goto :eof
复制代码
这样改的话是可以过滤if语句的判断条件了,但问题又来了,如果上例中的“选项”有N个,
那么,if %input%==* (goto %input%)  这一语句不就是要写上N条?
有没有其它高效一点的写法?

在此诚心求教如何解决这问题!

[ 本帖最后由 januapr 于 2009-8-4 21:22 编辑 ]
1

评分人数

    • keen: 感谢主动给标题标注[已解决]字样PB + 2

for /l %%a in (1 1 5) do if %input%==%%a (goto %input%)
1

评分人数

TOP

回复 2楼 的帖子

在此谢谢二楼的朋友了!
这里我没有想到用for语句限制input的输入范围,呵呵!
再次感谢二楼朋友的帮助!!

[ 本帖最后由 januapr 于 2009-8-4 21:30 编辑 ]

TOP

今天在百度上搜到了这个:
让批处理IF满足多个条件的方法,
比如要满足如果%a%大于等于1 ,同时 %b%小于等于100时goto loop,
代码如下:
  1. if %a% geq 1 if %b% leq 100 goto loop
复制代码
这个还可以继续添加多层判断!


于是我上面的就问题也能这么解决了;
  1. if %input% geq 1 if %input% leq 5 goto %input%
复制代码

[ 本帖最后由 januapr 于 2009-8-5 03:42 编辑 ]

TOP

最好用的还是 这个 choice /c 123456780abcdefgh /t 30 /d 1  /m 请选择:
                                  goto :%errorlevel%

比SET 好的地方:
      自动过滤非法选择(用set的话,你叫选123我选789怎么样?还要加些判断)
      选择后直接运行不用按回车。

TOP

楼上的,choice没set好的地方你怎么不说?不要说“最好是用choice”,我用过的将近50台机都没choice这个命令。

TOP

呵呵,论坛的人气还是不错的哦!
这么多朋友热心解的,在此再谢谢大家!

经5楼和6楼的朋友提点,自己亲自测试了一下,感觉不错,哈哈
那我顶楼的问题也可以这样解决了,
  1. choice /c 12345  /n /m 请选择:
  2. goto %errorlevel%
复制代码
用上面的代码直接代替原来的
  1. :loop
  2. set /p input=请输入你的选项并回车确认:
  3. if %input%==1 (goto %input%)
  4. if %input%==2 (goto %input%)
  5. if %input%==3 (goto %input%)
  6. if %input%==4 (goto %input%)
  7. if %input%==5 (goto %input%)
  8. echo 你的输入不合要求请重新选择!
  9. goto loop
复制代码
正如6楼朋友说的那样,考虑到XP系统没有choice.exe,
我们必须下一个choice.exe并和批处放在同一目录下,这样就OK了!

choice的下载和使用请详见:http://www.bathome.net/viewthread.php?tid=1726

[ 本帖最后由 januapr 于 2009-8-5 04:56 编辑 ]

TOP

哪个xp 系统没有choice?开什么玩笑?choice是 dos6.22里的外部命令. 10年前我刚上学的时候就在用,现在怎么会没有?你的机子没有?麻烦不要装什么精简版XP!!!!!!!

TOP

回复 8楼 的帖子

别动气,原版的xp确实是没有……

TOP

应该是WINDOWS 2000没有 CHOICE 吧
我们觉得崖畔的鲜花很美,那是因为它们敢于踏出迈向天空的一步!

TOP

返回列表