[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]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 编辑 ]

回复 19楼 的帖子

如果有人帮你解决了问题,建议进行以下操作:

1、修改帖子标题,在标题最前面注明:【已结】

2、给竭尽所能帮你的人、正确回答问题的人加分(你自己的积分不会减少)以示感谢,虽然大家来论坛是为了学习而不是为了积分,但加分聊表谢意总是或多或少能够让花费了时间和精力无私帮助你的人略感欣慰。

3、如果你是在别人的提示下自己写出了代码,请把自己的方法贴出来跟大家分享一下,也许他人可以帮你指出代码中的不足之处、告诉你如何提高执行效率等,有交流才能更快地进步。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

完成任务

本来想用“%var:~0,1%”拆分提取输入字符的,但对这个不熟悉,请高手们指教。
弄来弄去还真的只是懂得FOR而已了,看来要加强学习。
  1. @echo off
  2. set /p var=请输入数字(有多个数字时用空格隔开):
  3. for %%i  in (%var%) do call  :%%i
  4. pause
  5. :1
  6. echo 偶看?
  7. goto :eof
  8. :2
  9. echo NND
  10. goto :eof
  11. :3
  12. echo ok!~
  13. goto :eof
复制代码

TOP

原帖由 batman 于 2009-2-22 23:24 发表
按楼主的要求模拟一段代码:@echo off
set /p choice=请选择项目(a b c):
:lp
if defined choice (
  set "a=%choice:~,1%"&set "choice=%choice:~1%"
  call,goto %%a%%
)
echo 所有项目都执行完毕&pause>nu ...

非常感谢版主,热心的帮助,代码实现了需要的功能。
这个代码本身可以逐一输入,逐一执行的。那么是否可以同时输入,分别执行?化繁为简,提高效率嘛,于是有了这个代码的需求!
举个例子吧:假如你想叫一个人帮你买手机、相机、U盘。我想你不会叫他手机买了回来后,再叫他去帮你买相机吧,相机买了以后再叫他买U盘吧?现实不可能如此,但是批处理执行的时候好多情况如此!所以告诉他要买的东西列表,一起买回来即可啦!(汗死,什么例子嘛,这么别扭!@¥[email=#@%]#@%[/email],没法好多批就是这么做的。。。所以有了这个思考!)

TOP

  1. @Echo Off
  2. SetLocal ENABLEDELAYEDEXPANSION
  3. :menu
  4. Set String=l1,l2,l3,l4
  5. Set /P Input="Input:\>"
  6. For %%i in (%String%) Do (
  7.     Echo !Input!|Find /i "%%i" >nul&&Set Input=!Input:%%i=!&&Call :%%i
  8. )
  9. pause
  10. goto menu
  11. :l1
  12. echo %~0
  13. Goto :eof
  14. :l2
  15. echo %~0
  16. Goto :eof
  17. :l3
  18. echo %~0
  19. Goto :eof
  20. :l4
  21. echo %~0
  22. Goto :eof
复制代码

TOP

按楼主的要求模拟一段代码:
  1. @echo off
  2. set /p choice=请选择项目(a b c):
  3. :lp
  4. if defined choice (
  5.   set "a=%choice:~,1%"&set "choice=%choice:~1%"
  6.   call,goto %%a%%
  7. )
  8. echo 所有项目都执行完毕&pause>nul&goto :eof
  9. :a
  10. echo 现在执行项目optimize
  11. ping /n 3 127.1>nul&goto lp
  12. :b
  13. echo 现在执行项目restore
  14. ping /n 3 127.1>nul&goto lp
  15. :c
  16. echo 现在执行项目ntfs
  17. ping /n 3 127.1>nul&goto lp
复制代码
1

评分人数

***共同提高***

TOP

回复 15楼 的帖子

执行的很多!比如:
if /i "%choice2%"=="A" goto optimize
if /i "%choice2%"=="B" goto Restore
if /i "%choice2%"=="C" goto ntfs
if /i "%choice2%"=="D" goto IE
if /i "%choice2%"=="E" goto virus
if /i "%choice2%"=="F" goto msdos
if /i "%choice2%"=="G" goto Drives
if /i "%choice2%"=="H" goto minfo
if /i "%choice2%"=="I" goto info
if /i "%choice2%"=="J" goto wmic
if /i "%choice2%"=="K" goto wd
if /i "%choice2%"=="L" goto bat
if /i "%choice2%"=="M" goto dy
if /i "%choice2%"=="N" goto set
if /i "%choice2%"=="O" goto ps
if /i "%choice2%"=="P" goto label
if /i "%choice2%"=="S" goto other
if /i "%choice2%"=="T" goto regsvr
if /i "%choice2%"=="U" goto mscon
if /i "%choice2%"=="V" goto 2000reg
if /i "%choice2%"=="W" goto 2000Restore
if /i "%choice2%"=="Q" goto killport
if /i "%choice2%"=="R" goto openport
if /i "%choice2%"=="Y" goto start

TOP

回复 14楼 的帖子

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

TOP

回复 13楼 的帖子

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

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

回复 11楼 的帖子

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

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

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

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

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

回复 5楼 的帖子

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

TOP

返回列表