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

[其他] 【已结】同时赋多值,而分别执行的代码如何实现

@echo off
echo 1.x
echo 2.xx
echo 3.xxx
echo 4.xxxx
set /p n=请输入:
可以实现输入“123”后执行对应的123标签,而输入“124”执行下面124标签?
:x
:xx
:xxx
:xxxx

[ 本帖最后由 愚无尽 于 2009-2-23 13:21 编辑 ]

  演示代码如下:
  1. @echo off
  2. echo 1.x
  3. echo 2.xx
  4. echo 3.xxx
  5. echo 4.xxxx
  6. set /p n=请输入:
  7. goto %n%
  8. pause
  9. exit
  10. :x
  11. ……
  12. pause
  13. exit
  14. :xx
  15. ……
  16. pause
  17. exit
  18. :xxx
  19. ……
  20. pause
  21. exit
  22. :xxxx
  23. ……
  24. pause
  25. exit
复制代码
  需要注意的是,在每个标签段下,需要用正确的跳转语句或直接用exit退出语句,以防止批处理执行到其他标签段中的语句,因为批处理的执行顺序是“自上而下,逐条执行”的——在没有流程跳转语句的时候。

  另外,你的标题是说要同时赋多值而分别执行,难道是在输入的时候,同时输入 123 和 124,然后分别执行123标签段和124标签段吗?请注意标题和你的正文内容不要产生矛盾或歧义。
尺有所短寸有所长,学好批处理没商量;
考虑问题复杂化,解决问题简洁化。

心在天山,身老沧州。

TOP

多谢管理,不是那样的效果。
我需要的是执行前,输入了多个变量值,根据多个值再继续执行。不是分别输入,分别执行。
例如:n输入了12,那么就分别执行标签1,标签2
           n输入了134 ,那么就分别执行标签,1、3、4
应该清楚了吧,这个有点难表达

[ 本帖最后由 愚无尽 于 2009-2-22 19:33 编辑 ]

TOP

@echo off
echo 1.x
echo 2.xx
echo 3.xxx
echo 4.xxxx
set /p n=请输入:
if n=12 就执行:x和:xx
if n=134 就执行 :x、:xxx、:xxxx
:x
:xx
:xxx
:xxxx

就是这种逻辑关系

TOP

  1. @echo off
  2. echo 1.x
  3. echo 2.xx
  4. echo 3.xxx
  5. echo 4.xxxx
  6. set /p n=请输入:
  7. call :%n:~,1%
  8. if "%n:~1,1%" neq "" call :%n:~1,1%
  9. if "%n:~2,1%" neq "" call :%n:~2,1%
  10. if "%n:~3,1%" neq "" call :%n:~3,1%
  11. pause
  12. exit
  13. :1 x
  14. echo 1.x
  15. goto :eof
  16. :2 xx
  17. echo 2.xx
  18. goto :eof
  19. :3 xxx
  20. echo 3.xxx
  21. goto :eof
  22. :4 xxxx
  23. echo 4.xxxx
  24. goto :eof
复制代码

[ 本帖最后由 tireless 于 2009-2-22 20:26 编辑 ]

TOP

回复 5楼 的帖子

经测试有错误,谢谢,再看看

TOP

回复 6楼 的帖子

5楼已修改。忘记了给标签加冒号。。。

TOP

回复 5楼 的帖子

非常感谢,有效,能不能简单分析一下。

TOP

原帖由 tireless 于 2009-2-22 20:20 发表
5楼已修改。忘记了给标签加冒号。。。

晕,我也不细心没注意看,感谢。
if "%n:~1,1%" neq "" call :%n:~1,1%
if "%n:~2,1%" neq "" call :%n:~2,1%
if "%n:~3,1%" neq "" call :%n:~3,1%

假如输入的字符串太多,这里的内容会过多,代码不够精简,是否可以采用 for循环命令实现?

TOP

对了,我的标签不是:1、:2、:3这样特定格式。
所以楼上的朋友,那个写法还是不能实现哈

[ 本帖最后由 愚无尽 于 2009-2-22 20:35 编辑 ]

TOP

回复 10楼 的帖子

建议使用跟输入相同的标签,反正标签后还可以加注释,不会降低代码可读性。
  1. @echo off
  2. echo 1.x
  3. echo 2.xx
  4. echo 3.xxx
  5. echo 4.xxxx
  6. set /p n=请输入:
  7. :lp
  8. call :%n:~,1%
  9. set n=%n:~1%
  10. if "%n%" neq "" goto lp
  11. pause
  12. exit
  13. :1 注释 x
  14. echo 1.x
  15. goto :eof
  16. :2 xx
  17. echo 2.xx
  18. goto :eof
  19. :3 xxx
  20. echo 3.xxx
  21. goto :eof
  22. :4 xxxx
  23. echo 4.xxxx
  24. goto :eof
复制代码

TOP

回复 11楼 的帖子

标签数量远远超过了10个,所以应用起来不便。

TOP

  1. @echo off
  2. echo 1.x
  3. echo 2.xx
  4. echo 3.xxx
  5. echo 4.xxxx
  6. set n=
  7. set /p n=请输入你的选择(用空格分开):
  8. for %%i in (%n%) do goto %%i
  9. pause
  10. exit
  11. :1
  12. ……
  13. pause
  14. exit
  15. :2
  16. ……
  17. pause
  18. exit
  19. :3
  20. ……
  21. pause
  22. exit
  23. :4……
  24. pause
  25. exit
复制代码
输入不用空格分开也是可以的,代码就复杂了点
标签的代码不能有退出,应当允许同时执行所有标签!!!

[ 本帖最后由 zjw767676 于 2009-2-22 22:07 编辑 ]

TOP

回复 13楼 的帖子

这个案例就是为了执行时候的便捷,假如还去输入空格分开的话,失去意义了
用一般的输入一个单次值,单独执行就行了

TOP

回复 14楼 的帖子

能说明下标签执行的是什么吗?
也许能给人点思路!

TOP

返回列表