Windows XP批处理脚本中延时执行命令的几种方法

在Windows中通过批处理命令脚本可以实现很多功能,比如自动启用/禁用无线网卡,自动检测程序的运行状态等等等等。在批处理脚本编写中,经常需要延时一定时间执行命令,这里分享一下几个比较常用的方法(以下以XP系统为例):

1、通过Ping本地计算机实现延时:利用Ping命令每秒钟发出一个ICMP数据包的功能,实现精确到秒的延时。

语法:Ping -n (延时的秒数+1) 127.0.0.1 >nul

需要计算机安装TCP/IP协议(这个现在的计算机应该都有安装了),运行中需要Fork一个Ping的进程,内存占用和CPU占用比后面的方法会稍高一点。

2、使用Windows 2003中自带的timeout命令(XP系统没有,可以去2003系统拷贝一个就可以用了,如果没有2003系统,也可以单独安装2003的Resource Kit)

语法:timeout 延时的秒数 /NOBREAK >nul

详细的命令行参数:

TIMEOUT [/T] timeout [/NOBREAK]

描述:
这个工具接受超时参数,等候一段指定的时间(秒)或等按任意键。它还接受一个参数,忽视按键。

参数列表:
/T timeout 指定等候的秒数。有效范围从 -1 到 99999 秒。

/NOBREAK 忽略按键并等待指定的时间。

注意: 超时值 -1 表示无限期地等待按键。

示例:
TIMEOUT /?
TIMEOUT /T 10
TIMEOUT /T 300 /NOBREAK
TIMEOUT /T -1

估计是直接调用Win32API的VC原生代码,实际测试内存和CPU的占用都比Ping的方法要好一些。 

3、网上搜索看到Windows系统也有符合POSIX标准的Sleep命令,在微软Windows Server 2003 Resource Kit Tools的下载页面:

 http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=17657

可以查到包含的工具里面有Sleep.exe: Batch File Wait这个命令,要使用的话需要先下载安装2003的Resource Kit Tools,具体的用法没有测试。Sleep命令的内存和CPU占用应该和timeout差不多。 


当然还有其他一些通过vbs脚本实现更精确延时的方法(精确到毫秒),类似这样:

@echo off
set wait=%1
echo waiting %wait% s
echo wscript.sleep %wait%000 > wait.vbs
wscript.exe wait.vbs
del wait.vbs

不过需要从批处理脚本中调用VBS脚本解释器,未测试内存和CPU的开销是否会比以上的方法更大。

发表回复

邮箱地址不会被公开。 必填项已用*标注