2014-10-20 66 views
0

我在命令提示符下執行了下面的命令。使用批處理腳本獲取CPU利用率百分比

輸入:

C:\>@for /f "skip=1" %p in ('wmic cpu get loadpercentage') do @echo %p% 
    8% 
    % 

我寫的代碼只得到8%的批處理腳本像下面,

call :Harddisk 
call :CPU 
Echo ^</TABLE^> ^</BODY^> ^</HTML^> >> %opfile% 
pause 
exit /b 

:CPU 
set [email protected] /f skip=1 %p in ('wmic cpu get loadpercentage') do @echo %p% |Find /c /v ":" 
ECHO wmih 
for /f "tokens=1,2,3,4,5" %%a in ('"%wmih%"') do (
    Echo ^<TR^> ^<TD^> >> %opfile% 
    Echo CPU Utilization: %%a >> %opfile% 
    Echo ^</TD^> ^</TR^> >> %opfile% 
) 

exit /b 

我沒有得到正確的輸出。請幫我整理一下。

謝謝!

回答

1
for /f "tokens=2 delims==" %%i in ('wmic cpu get loadpercentage /value ^|find "="') do echo set p=%%i 
set p=%p:~0,-1% 
echo %p% 
+1

不,它工作得更好,因爲當在變量內容中找到第一個CR時,'echo%p%'結束工作。在這種情況下'find'不會改變行結束。爲了測試,在代碼中加入'cmd/v:on/c「echo!p!...!p!」'並查看輸出。 – 2014-10-21 06:10:07

+0

grrr。我會*討厭那個醜陋的'wmic'output ...所以'%p%'仍然包含那。但可以刪除。改變了我的代碼。 – Stephan 2014-10-21 06:57:58

0

只是爲了讓你的結構

:CPU 
set "[email protected] /f "usebackq skip^^^=2 tokens^^^=2 delims^^^=^^^," %%p in (`wmic cpu get loadpercentage^^^,version /format^^^:csv`) do @echo(%%p%%" 
ECHO %wmih% 
for /f "tokens=1,2,3,4,5" %%a in ('"%wmih%"') do (
    >>%opfile% Echo ^<TR^> ^<TD^> 
    >>%opfile% Echo CPU Utilization: %%a 
    >>%opfile% Echo ^</TD^> ^</TR^> 
) 

爲了能夠存儲命令在變量中,然後將它傳遞給for命令,將產生另一個cmd實例來執行命令,你需要大量的scape字符來處理命令的執行。

它可以更容易

:CPU 
for /f "skip=2 tokens=2 delims=," %%a in (
    'wmic cpu get loadpercentage^,version /format^:csv' 
) do (
    >>%opfile% Echo ^<TR^> ^<TD^> 
    >>%opfile% Echo CPU Utilization: %%a%% 
    >>%opfile% Echo ^</TD^> ^</TR^> 
) 

在這兩種情況下,在檢索到的值,所述查詢請求的輸出以CSV格式與aditional的字段的結尾去除aditional的CR字符,所以,在需要的數據不在行尾,值不會包含結尾CR