日期:2014-05-17 浏览次数:21015 次
@echo off :a ping baidu.com -n 1 -l 0 -w 3000 >nul&&goto a start shutdown -s -t 1200 :b ping baidu.com -n 1 -l 0 -w 3000 >nul&&(shutdown -a&&goto a)||goto b
------解决方案--------------------
要注意2003系统shutdown只支持600秒延时
------解决方案--------------------
给楼主写了个VBS,实现起来比较完美,在后台执行,每30秒PING一次网关IP,如果不通,追加20分钟计时,如果在这20分钟内网关PING通,取消执行关机,如果20分钟到了还PING不通就立即执行关机。
这个VBS相对批处理耗用资源少,后台静默运行,及时也较准。
代码已经给你在2003下面测试通过
'赋值IP或者域名给strHost
strHost = "192.168.0.1"
'关机时间状态,用来避免循环中改写关机计时时间和取消关机
sdOld = True
'循环开始,如要结束运行只能终止进程
Do
'循环开始首先获取当前时间
nowTime = FormatDateTime(Time, vbShortTime)
'如果PING不通而且未设置关机计时时间,将设置计时20分钟
if Ping(strHost) = False and sdOld = True Then
sdOld = False
nextTime = FormatDateTime(DateAdd("n" , 20, now), vbShortTime)
End if
'如果PING通取消关机
if Ping(strHost) = True Then
sdOld = True
End if
'如果当前时间等于关机时间,而且计时未取消,立即执行关机
if nowTime = nextTime and sdOld = False Then
CreateObject("WScript.Shell").Exec("shutdown -s -t 0 -d P:4:1")
End if
'等待30秒进行下次循环
Wscript.Sleep 30000
Loop
Function Ping(strHost)
Set objPing = GetObject("winmgmts:").Get("Win32_PingStatus.Address='" & strHost & "'")
If ISNull(objPing.StatusCode) or objPing.StatusCode<>0 Then
Ping = False
Else
Ping = True
End If
End Function
------解决方案--------------------
xue学习了学习了