@echo off
setlocal enabledelayedexpansion
for /l %%i in (0,1,4) do (
SET count=1
FOR /F "tokens=* USEBACKQ" %%F IN (`wmic /node:'SERVER_NAME' cpu get loadpercentage`) DO (
SET var!count!=%%F
SET /a count=!count!+1
)
set var=%% %var2%
echo CPU Usage: %var%
)
endlocal
pause
大家好。我在BAT文件中运行一个简单的循环,并希望让CPU%显示超过5个循环。查找工作正常 - 但是 - %var%未填充。
如果我删除了do函数并且只有wmic命令,它会生成并循环正常。
我在这里遗漏了一些非常明显但却看不到的东西。你能帮忙吗?
答案 0 :(得分:0)
set var=%% !var2!
echo CPU Usage: !var!
var
和var2
在外部循环的开头是空的(我推测),所以在这两个语句中它们被 nothing 替换之前执行。
答案 1 :(得分:0)
您还没有解释您想要做什么。如果你想要平均值,那么你应该累积 CPU%并在结尾处除以总和。您的代码似乎只显示了5个样本中的第二个值,而不是从5个值中累积第二行。
这对我有用:
@echo off
setlocal enabledelayedexpansion
set var2=0
for /l %%i in (0,1,4) do (
SET count=1
FOR /F "tokens=* USEBACKQ" %%F IN (`wmic cpu get loadpercentage`) DO (
if !count! equ 2 SET /A var2=var2+%%F
SET /a count=!count!+1
)
)
set /A var=var2/5
echo CPU Usage: %var%
endlocal
pause
SET /a count=!count!+1
行可以用这种更简单的形式编写:SET /a count+=1
。
答案 2 :(得分:0)
有时PowerShell可以更简单:
(Get-Counter -ComputerName 'SERVER_NAME' '\Processor(_Total)\% Processor Time' -MaxS 5 | Select -ExpandP CounterSamples | Select -ExpandP CookedValue | Measure -Average).Average
即使是批处理文件:
@PowerShell -C "(Get-Counter -ComputerName 'SERVER_NAME' '\Processor(_Total)\%% Processor Time' -MaxS 5 | Select -ExpandP CounterSamples | Select -ExpandP CookedValue | Measure -Average).Average"
只需根据需要更改SERVER_NAME