[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
本帖最后由 slore 于 2017-11-30 00:13 编辑
  1. @echo off
  2. set batchmode=0
  3. :main
  4. rem menu
  5. if "%batchmode%"=="1" goto :EOF
  6. echo ===============================
  7. echo 1.功能abc
  8. echo 2.功能def
  9. echo 3.根据a.txt定义批量执行
  10. set /p mode=请选择:
  11. if "%mode%"=="1" goto :功能abc
  12. if "%mode%"=="2" goto :功能def
  13. if "%mode%"=="3" goto :BATCH_MODE
  14. pause
  15. exit 0
  16. :功能abc
  17. echo RUN-功能abc
  18. goto main
  19. :功能def
  20. echo RUN-功能def
  21. goto main
  22. :BATCH_RUN
  23. goto %1
  24. echo 其实不会运行到这里,这行和下一行可以不写
  25. goto :EOF
  26. :BATCH_MODE
  27. set batchmode=1
  28. for /f "delims=, tokens=1,2" %%i in (a.txt) do (
  29.     echo 将要执行%%j
  30.     call :BATCH_RUN %%i
  31. )
  32. set batchmode=0
  33. goto main
复制代码
a.txt不用反复修改。相当于你的执行模板,可以写很多份,或者当input的参数输入,用起来方便些吧。

TOP

回复 4# marya
  1. @echo off
  2. set batchmode=0
  3. :main
  4. rem menu
  5. if "%batchmode%"=="1" goto :EOF
  6. echo ===============================
  7. echo 1.功能abc
  8. echo 2.功能def
  9. echo 3.根据a.txt定批量行
  10. set /p mode=選択:
  11. if "%mode%"=="1" goto :功能abc
  12. if "%mode%"=="2" goto :功能def
  13. if "%mode%"=="3" goto :BATCH_MODE
  14. pause
  15. exit 0
  16. :功能abc
  17. echo RUN-功能abc
  18. goto main
  19. :功能def
  20. echo RUN-功能def
  21. goto main
  22. :BATCH_MODE
  23. set batchmode=1
  24. for /f "delims=, tokens=1,2" %%i in (a.txt) do (
  25.     echo 将要行%%j
  26.     call :%%i
  27. )
  28. set batchmode=0
  29. goto main
复制代码
去掉了可能产生疑问的BATCH_RUN标签。

和你的想法还有2L的区别是 goto :%%i 变成了  call :%%i

这个把标签当作“函数”执行。
  1. @echo off
  2. set /a n=1
  3. call :test
  4. call :test
  5. call :test
  6. pause
  7. exit 0
  8. :test
  9. echo "test%n%"
  10. set /a n+=1
  11. goto :EOF
复制代码
将输出
test1
test2
test3

从 标签 到 "GOTO :EOF" 为函数的执行流程,走到goto :EOF后,回到call所在行,然后执行下面的语句。

用goto的话,是直接跳转过去,不回来。

TOP

返回列表