@echo off setlocal REM 当内存占用超过85%且时间是21点-9点区间时就执行重启机器语句,1个小时轮询一次,适用于win server 2008R2 :LOOP REM 获取当前时间 for /f "tokens=1-3 delims=:." %%a in ("%time%") do ( set"hour=%%a"set"minute=%%b"set"second=%%c") REM 获取当前内存占用率 for /f "skip=1 tokens=2 delims==" %%a in ('wmic OS get FreePhysicalMemory /value') do ( set"free_memory=%%a" call :CHECK_MEM_USAGE ) REM 判断满足条件则执行重启机器 if"%is_reboot%"=="true" ( echo 重启机器中... shutdown /r /f /t 60exit) else ( echo 没有满足条件。等待一个小时后进行下一次检查... powershell -Command"& {Write-Host '当前时间: ' -NoNewline ; Get-Date -format 'HH:mm:ss' ; Write-Host '下一次轮训检查时间是: ' -NoNewline ; $newTime = Get-Date -Date (Get-Date).AddHours(1) -format 'HH:mm:ss' ; $newTime}") REM 等待一小时后继续检查 timeout /t 3600 >nul goto :LOOP :CHECK_MEM_USAGE REM 计算内存使用率 set /a "total_memory=free_memory+0"set /a "used_memory=768-total_memory"set /a "mem_usage=(used_memory*100)/768"REM 判断内存使用率是否超过85% if %mem_usage% gtr 85 ( call :CHECK_TIME if"%is_reboot%"=="true" ( set"is_reboot=true" ) ) exit /b :CHECK_TIME REM 判断当前时间是否在晚上9点到凌晨9点之间 if %hour% lss 9 ( set"is_reboot=true") elseif %hour% equ 9 ( if %minute% leq 59 ( set"is_reboot=true" ) else ( set"is_reboot=false" ) ) elseif %hour% geq 21 ( set"is_reboot=true") else ( set"is_reboot=false") exit /b exit /b