找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 25249|回复: 2

[日期时间] 批处理如何实现按需调用/执行不同的子过程?

[复制链接]
发表于 2016-5-6 13:38:44 | 显示全部楼层 |阅读模式
本帖最后由 pcl_test 于 2016-5-7 14:25 编辑

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

评分

参与人数 1PB -4 收起 理由
pcl_test -4 未按版规发帖

查看全部评分

 楼主| 发表于 2016-5-6 16:27:42 | 显示全部楼层
我摸索出来一种新的方案:在子程序内部进行时间判断该程序所运行的时间,如果运行时间大于设定值,就跳出该子程序。但在时间判断时,但运行中好像不对,不知道该怎么解决,代码如下:
  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
复制代码
另外,好像我这命令太复杂了,可不可以简化一下。谢谢!
发表于 2016-5-6 21:21:08 | 显示全部楼层
本帖最后由 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
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 14:45 , Processed in 0.027447 second(s), 15 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表