2012-07-25 29 views
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返回LoadPercentage = 0(或其他數字)形式的CPU使用情況。我用for循環過濾並分配數字加載。由於我不明白的原因,這個作業有些問題。我無法回顯該值(顯示「」),無論我如何定義高CPU使用率,負載都會通過IF GEQ語句。即使是0%的負載明顯大於10.我知道問題出在設置上,因爲我檢查了tempfile.txt並且它被正確過濾了,但我仍然不知道爲什麼它是錯誤的。

感謝您的任何幫助。

回答

0

您認爲SET命令可以從標準輸入讀取,而不是這種情況。

您可以簡單地將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循環。您可能需要啓用延遲擴展,以便它們能夠正常工作,以防循環中有多個賦值。 Eventhough這不是你的情況,你只需要調整

​​

,然後使用這個可選的語法

if !load! geq 10 (
+0

非常感謝參考一下吧!我不得不啓用延遲,但它的工作完美。 – VerrKol 2012-07-25 23:18:30