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は、CPU使用率をLoadPercentage = 0(または他の数値)の形式で返します。これをforループでフィルタリングし、ロードする桁を割り当てます。わからない理由で、割り当てに問題があります。値をエコーできず( ""を表示)、CPU使用率を高く定義しても、loadはIFGEQステートメントを渡します。0%の負荷でも明らかに10より大きくなります。tempfile.txtをチェックして正しくフィルタリングされているため、setに問題があることはわかっていますが、なぜそれが間違っているのかはわかりません。
助けてくれてありがとう。