1 Jun 2013

Pause batch file for a while暂停批处理命令

收藏到CSDN网摘

有时候有需要暂停批处理命令,如果等待用户按任意键继续,可以使用PAUSE,但是如何让它暂停一段时间后自动运行呢?

如果是vista或者win7,可使用timeout来指定暂停秒数,例如下面的命令可以暂停30s
TIMEOUT /T 30

但是如果是xp或者之前的系统该如何操作呢?一个hack的办法就是利用PING来暂停后自动继续,为了不让ping输出信息,可以重定向到NUL
PING 1.1.1.1 -n 1 -w 60000 >NUL

-w开关可以保证两次ping的间隔精确到毫秒级(ms),加上-n开关来指定ping的次数,由于是暂停后自动运行,所以一次就可以了.上面的代码可以暂停60s(1*60000=1*60*1000ms=60s).虽然用-n 60 -w 1000看起来一样(60*1000ms=60s),但是实际使用起来可能会非常不精确,因此推荐使用一次,然后-w指定时间.使用1.1.1.1这个并不存在的ip地址的原因是,如果ping一个实际存在的地址(例如localhost),无论如何指定间隔,下一次ping都会在1s后立即运行.

这虽然是个非常精确的办法,却也有其弊端:
1) 要使用不存在的ip地址,但是不能使用不存在的host name,否则会在1s后返回一个unknow host name错误.
2) 电脑必须处于联网状态,否则会立即得到错误信息,并不会延迟.

因此,一个安全,无需联网,但是并不是"特别"精确的解决方案是,在你需要延迟的秒数上加1,然后使用下面的代码(延迟5s)
PING 127.0.0.1 -n 6 >NUL

No comments :

Post a Comment