循环遍历.bat中的行并存储变量而不覆盖

时间:2015-05-01 18:33:42

标签: windows loops batch-file

我试图在变量

中存储性能计数器的度量值
FOR /F "tokens=1-2 delims==,¶" %%I IN ('typeperf "\Memory\Available bytes" -sc 1') DO ( 
ECHO I %%I, J %%J
)

但for循环的每次迭代都会覆盖前一行的变量。有什么建议吗?

3 个答案:

答案 0 :(得分:1)

3x

这是你想要达到的目标吗?

答案 1 :(得分:1)

@ECHO OFF >NUL
SETLOCAL enableextensions enabledelayedexpansion

:: number of samples
set "iiIters=5"
:: iteration counter
set /A "iiCnt=0"

FOR /F "tokens=1-2 delims=," %%I IN (
  'typeperf "\Memory\Available bytes" -sc %iiIters%^| findstr /R ".*\",\".*"') DO (

    set "iiValName[!iiCnt!]=%%~I"
    set "iiValValue[!iiCnt!]=%%~J"
    set /A "iiCnt+=1"
)
:: display result
set ii

在上面的代码片段中,来自性能计数器的数据存储在类似数组的变量中:

  • iiValName[0]:输出格式(CSV标题);
  • iiValValue[0]CSV格式的效果计数器(\\Computer\Object(Instance)\Counter标题)的全名;
  • iiValName[n]:特定的样本日期和时间(n >= 1);
  • iiValValue[n]:对应的指标值(n >= 1)。

资源(必读):

答案 2 :(得分:0)

谢谢大家的回答。我选择使用Powershell并用此获得了我想要的结果 -

`$freespace = Get-Counter "\LogicalDisk(_Total)\% Free Space"
$f = $freespace.countersamples | Select-Object -Property RawValue
$fVal = $f.rawvalue`

我只需要一种方法将性能计数器的值存储在变量中。