日期:2014-05-17 浏览次数:20827 次
@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学习了学习了