2013-10-23 125 views
0

我有一個2 * CPU的服務器。當我在服務器上下面的代碼運行它給出了兩個CPU的LoadPercentage值:負載的服務器有2個CPU

代碼:

@echo off 
setlocal enabledelayedexpansion 

(For /F "tokens=1,* delims==" %%A in ('"wmic cpu get LoadPercentage /value |find "P" "') do (
set "line=%%A %%B" 
set "line=!line:~0,-1!" 
echo !line! 
))>output.txt 

output.txt中:

LoadPercentage 2 
LoadPercentage 4 

雖然在任務管理器 - 服務器>性能它只顯示一個值(顯然,因爲服務器是1)。 當CPU是兩個時,這個值如何顯示...?這是兩個人的平均數..?我可以如何使用批處理獲得單個CPU負載百分比值?

回答

1

是的,它是負載的總和除以處理器的數量。

for循環中,當您獲得負載時,將它們相加並計算cpus的數量。在for退出,set /a average=...會給出答案。

EDIT(在OP自己的答案)

@echo off 
    setlocal enableextensions enabledelayedexpansion 

    rem Initialize variables 
    set sum=0 
    set num=0 

    rem Iterate over wmic output 
    for /f "tokens=2 delims==" %%1 in ('wmic cpu get LoadPercentage /value ^|find "P" ') do (
     set /a sum=!sum!+%%1 
     set /a num=!num!+1 
    ) 

    rem test if we get any data 
    if %num% gtr 0 (
     set /a avg=%sum%/%num% 
    ) else (
     set avg=0 
    ) 

    echo CPULoadPercentage %avg% > output.txt 

    exit /b 
+0

thanks..MC ..!請看到我的回答..!:) – Sunny

0

Here..it工程..

@echo off 
setlocal enabledelayedexpansion 
set sum=0 
(for /f "tokens=1-2* delims==" %%1 in ('"wmic cpu get LoadPercentage /value |find "P" "') do (
set /a sum=!sum!+%%2 
) 
set /a avg=!sum!/2 
echo CPULoadPercentage !avg! 
)>output.txt 
exit /b 
+1

這如果處理器數量不是兩個,將會失敗。還有,太多了(和「,這很容易,請看更新的答案。 –

+0

同意你.. :) :) – Sunny