在BAT文件中使用/ node循环

时间:2017-10-10 09:16:24

标签: batch-file

@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命令,它会生成并循环正常。

我在这里遗漏了一些非常明显但却看不到的东西。你能帮忙吗?

3 个答案:

答案 0 :(得分:0)

set var=%% !var2!
echo CPU Usage: !var!

varvar2在外部循环的开头是空的(我推测),所以在这两个语句中它们被 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