我正在尝试编写一个批处理程序,它将监视cpu使用情况并在cpu使用率很高时停止病毒扫描。然后,当cpu使用率下降时,它将重新启动扫描。
ECHO Checks if the total CPU usage is greater than 10%
SET scanEnd=0
tasklist /FI "IMAGENAME eq scan32.exe" 2>NUL | find /I /N "scan32.exe">NUL
IF "%ERRORLEVEL%"=="0" (
ECHO Program is running
wmic cpu get loadpercentage /value
FOR /f "tokens=2-3 delims==" %%b in ('wmic cpu get loadpercentage /value') do (
echo %%b >> tempfile.txt
echo removed %%a)
SET /a load < tempfile.txt
DEL tempfile.txt
ECHO Load is "%load%"
IF load GEQ 10 (
ECHO High cpu usage
TSKILL scan32
SET scanEnd=1
))
PAUSE
IF "1" == "%scanEnd%" (
ECHO Scan not finished
IF load LSS 10 (
ECHO Restarting scan
"C:\Program Files\McAfee\VirusScan Enterprise\scan32.exe"
SET scanEnd=0))
ECHO End of program
PAUSE
wmic以LoadPercentage = 0(或其他数字)的形式返回cpu使用情况。我用for循环过滤它并指定要加载的数字。由于我不明白的原因,这项任务有问题。我无法回显该值(显示“”),无论我如何定义高CPU使用率,load都会传递IF GEQ语句。即使0%的负载显然大于10.我知道问题是set,因为我检查了tempfile.txt并且它被正确过滤了,但我仍然不知道为什么它是错的。
感谢您的帮助。
答案 0 :(得分:0)
你假设SET
命令可以从stdin中读取,而不是这种情况。
您可以简单地将FOR
变量分配到新变量中。
试试这个
for /f "tokens=2-3 delims==" %%a in ('wmic cpu get loadpercentage /value') do (
set /a load=%%a
)
然后
if %load% geq 10 (
echo load greater than 10%
)
但要注意FOR
循环内的分配。如果循环中有多个赋值,您可能需要启用延迟扩展才能使它们正常工作。虽然这不是你的情况,但你只需要调整
setlocal enabledelayedexpansion
然后使用此可选语法
引用它if !load! geq 10 (