BAT批处理的定时方法

前言

最近在项目中给测试的同事修改一个需求,需要在windows上定时去执行某个温度的测试,尝试了几种方法,在这里汇总一下使用过的方法。

一、延时方法汇总

1、timeout命令

timeout 10 > nul

这个指令精确度为秒,而且等待过程中可以按回车提前结束等待。>nul是不显示反显输出。
2、 ping命令

ping 123.45.67.89 -n 1 -w 10000 > nul

这个指令是通过ping某一无效IP达到定时的效果,-n是尝试次数,-w为ping的超时时间,单位为ms。这个指令的精确度较高,占用资源一般。
3、 choice命令

CHOICE /T 10 /D y /N > nul

choice是一个用户交互选择的指令,其用法可用 CHOICE /? 查看。

CHOICE [/C choices] [/N] [/CS] [/T timeout /D choice] [/M text]

描述:
    该工具允许用户从选择列表选择一个项目并返回所选项目的索引。

参数列表:
   /C    choices       指定要创建的选项列表。默认列表是 "YN"。

   /N                  在提示符中隐藏选项列表。提示前面的消息得到显示,
                       选项依旧处于启用状态。

   /CS                 允许选择分大小写的选项。在默认情况下,这个工具
                       是不分大小写的。

   /T    timeout       做出默认选择之前,暂停的秒数。可接受的值是从 0
                       到 9999。如果指定了 0,就不会有暂停,默认选项
                       会得到选择。

   /D    choice        在 nnnn 秒之后指定默认选项。字符必须在用 /C 选
                       项指定的一组选择中; 同时,必须用 /T 指定 nnnn。

   /M    text          指定提示之前要显示的消息。如果没有指定,工具只
                       显示提示。

   /?                  显示此帮助消息。

   注意:
   ERRORLEVEL 环境变量被设置为从选择集选择的键索引。列出的第一个选
   择返回 1,第二个选择返回 2,等等。如果用户按的键不是有效的选择,
   该工具会发出警告响声。如果该工具检测到错误状态,它会返回 255 的
   ERRORLEVEL 值。如果用户按 Ctrl+Break 或 Ctrl+C 键,该工具会返回 0
   的 ERRORLEVEL 值。在一个批程序中使用 ERRORLEVEL 参数时,将参数降
   序排列。

示例:
   CHOICE /?
   CHOICE /C YNC /M "确认请按 Y,否请按 N,或者取消请按 C。"
   CHOICE /T 10 /C ync /CS /D y
   CHOICE /C ab /M "选项 1 请选择 a,选项 2 请选择 b。"
   CHOICE /C ab /N /M "选项 1 请选择 a,选项 2 请选择 b。"

此指令精度为秒,且资源占用率低,但此指令可通过输入选项提前结束。

二、定时任务的实现

思路就是将定时与业务操作分离,使用两个bat,一个用于定时,一个用于业务处理,在定时任务中调起另一个bat实现定时。示例代码如下:

for /l %%i in (1 1 1000) do (
    echo times: %%i
	start cmd /c test_temper.bat
    ::timeout 15 >nul
	::call test_temper.bat
	ping 123.45.67.89 -n 1 -w 5000 > nul
)

使用start指令调起新的bat,此方法是打开新的terminal窗口执行bat脚本。

其他收获

本来想在for循环中打印时间,看下这个定时任务的精准度是否OK,写下了如下代码:

for /l %%i in (1 1 10) do (
    set time_now=%time:~0,8%
    echo time_now:%time_now%
	ping 123.45.67.89 -n 1 -w 1000 > nul
)

结果发现打印出的时间值都是一个,结果如下:
定时时间打印
后来找到原因,原来在批处理中for循环内部是按照一整句代码做预处理,而且由于处理过程中没有开启变量延迟,需要使用 setlocal enabledelayedexpansion 代码打开变量延迟,并配合 !! 来输出赋值之后的变量值。
具体可参考一下链接 :***https://www.jb51.net/article/29323.htm***

感谢上述链接编者的答疑解惑~~

  • 0
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值