0

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に問題があることはわかっていますが、なぜそれが間違っているのかはわかりません。

助けてくれてありがとう。

4

1 に答える 1

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 (
于 2012-07-25T16:33:12.067 に答える