Board logo

标题: [日期时间] 批处理如何实现按需调用/执行不同的子过程? [打印本页]

作者: junili    时间: 2016-5-6 13:38     标题: 批处理如何实现按需调用/执行不同的子过程?

本帖最后由 pcl_test 于 2016-5-7 14:25 编辑

由于bat不具备多线程,我又不想去调用太多子程序。我有这样一个假设:先获取当前时间,然后当系统时间大于“该时间”5S时执行标签A(子程序A);然后继续计时,大于“该时间”10S时执行标签B(子程序B),以此类推…。假设我有10个子程序,总运行时间是50S+,那就当计时至60S时就复位“该时间”为最新值,继续循环。
PS:因为我每个子程序基本上都有内循环,不知道怎么跳出内循环,只能用总时间去强制跳转。不知道各位大神有没有办法,最好是bat脚本,小白我就对bat情有独钟,方便我后期更改。谢谢!
作者: junili    时间: 2016-5-6 16:27

我摸索出来一种新的方案:在子程序内部进行时间判断该程序所运行的时间,如果运行时间大于设定值,就跳出该子程序。但在时间判断时,但运行中好像不对,不知道该怎么解决,代码如下:
  1. @echo off
  2. :test
  3. rem 子程序1
  4. set "time_1=%time:~3,2%%time:~6,2%"
  5. rem 获取 当前时间,取后4位
  6. echo %time_1%
  7. rem 显示 获取的时间。测试用,实例中可删除
  8. ping -n 5 127.1>nul
  9. rem 模拟 子程序(主代码)运行所占用的时间
  10. :001
  11. rem 子程序(内循环块)
  12. echo 循环中
  13. ping -n 2 127.1>nul
  14. rem 模拟 子程序(循环块)运行所占用的时间
  15. set "time_2=%time:~3,2%%time:~6,2%"
  16. rem 获取 当前时间,取后4位
  17. echo %time_2%
  18. rem 显示 获取的时间。测试用,实例中可删除
  19. set /a time=%time_2%-%time_1%
  20. rem 计算 时差
  21. echo %time%
  22. rem 显示 时差。测试用,实例中可删除
  23. if "%time%" gtr "5" (
  24. goto 002 )else (
  25. goto 001
  26. )
  27. rem 根据时差判断是否跳出跳出子程序
  28. exit
  29. :002
  30. echo 已跳至子程序2
  31. rem 子程序2
  32. pause>NULL
复制代码
另外,好像我这命令太复杂了,可不可以简化一下。谢谢!
作者: pcl_test    时间: 2016-5-6 21:21

本帖最后由 pcl_test 于 2016-5-7 23:42 编辑

举个栗子
  1. @echo off
  2. echo;#1
  3. call :1
  4. echo;#2
  5. call :2 4
  6. pause&exit
  7. :1
  8. for /l %%i in (1 1 3) do echo;%%i
  9. goto :eof
  10. :2
  11. set i=%1
  12. :loop
  13. echo;%i%
  14. if %i% equ 6 goto :1
  15. set/a i+=1
  16. goto loop
复制代码





欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2