使用set作为数值(批处理)

时间:2012-07-25 15:57:11

标签: windows batch-file windows-xp

我正在尝试编写一个批处理程序,它将监视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并且它被正确过滤了,但我仍然不知道为什么它是错的。

感谢您的帮助。

1 个答案:

答案 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 (