按网上资料,写了个服务器断电自动关机批处理。在2008上好用,在2003服务器不能用。何解?
代码如下
@echo off
title 服务器断网自动关机
MODE con: COLS=50 LINES=10
rem color 4a
echo 准备检测网络……
ping/n 4 -l 1 192.168.3.1
CLS
:go1
rem 单个IP检测时,断网后延时为(miao-1)*(ndiao-1)+(miao*ys) ys表示ping失败的耗时10秒左右
set /a miao= 50
rem MIXO的值为计算余下时间而设,注意总时间等于该值减1。余下时间=(miao-1)*(ndiao-1)
set /a ndiao = 10
rem ndiao的值为重新检测网络倒计时而设定,也影响到自关机时间,注意显示的值等于该值减1
:go2
set mac=
set /a miao=%miao%-1
if "%miao%"=="0" GOTO reboot
rem setlocal enabledelayedexpansion
rem 网络正常时
echo 检测网络进行中……
for /f "tokens=5 delims== " %%a in ('ping/n 2 -l 1 192.168.3.1^|findstr "字节=1" ') do (
set mac=%%a
)
:FOR1
echo 执行for1
@echo off & setlocal enableextensions
set /a i = %ndiao%
rem i的值为计算余下时间而设,余下时间=(miao-1)*(ndiao-1)
set /a miao2=%miao%*(ndiao-1)+%miao%*10
rem miao2为自动关机的余下时间=(miao-1)*(ndiao-1)
:Timeout
if %i% == 1 goto Next
setlocal
set /a i = %i% - 1
cls
echo . 服务器无人守值,断电/断网自动关机
echo .
if "%mac%" == "" (echo . 网络连接不正常,系统将在%miao2%秒后自动关机) ELSE (
echo . 网络连接正常)
echo .
echo . %i% 秒后重新检测网络
echo .
ECHO .
ECHO .
ping /n 2 -l 1 127.0.1>nul
goto Timeout
:Next
cls & echo.
if "%mac%" == "" (goto go2) else (goto go1)
:reboot
echo %date% %time% "服务器检测到网络不通60秒后关机" >>errlog.log
cd..
shutdown -s -t 60 -c "服务器检测到网络不通60秒后关机"
rem cls
echo %date% %time% "服务器检测到网络不通15秒后关机"
echo 关机60秒倒数计时中,可按任意键取消!
pause >nul
shutdown -a
exit
分享至: