【问题标题】:Loop through lines in .bat and store variables without overwriting循环遍历 .bat 中的行并存储变量而不覆盖
【发布时间】:2015-05-01 18:33:41
【问题描述】:

我正在尝试将性能计数器中的指标值存储在变量中

FOR /F "tokens=1-2 delims==,¶" %%I IN ('typeperf "\Memory\Available bytes" -sc 1') DO ( 
ECHO I %%I, J %%J
)

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

【问题讨论】:

    标签: windows loops batch-file


    【解决方案1】:
    @echo off
    
    setlocal enableDelayedExpansion
    FOR /F "skip=1 tokens=1-2 delims==,¶" %%I IN ('typeperf "\Memory\Available bytes" -sc 1') DO (
      if "%%~I" equ "Exiting" goto :break
      set "datet=%%~I"
      set "datet=!datet: =!"
      set "!datet!=%%~J"
    )
    :break
    set !datet!
    

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

    【讨论】:

      【解决方案2】:
      @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
      

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

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

      资源(必读):

      【讨论】:

        【解决方案3】:

        谢谢大家的回答。我选择使用 Powershell 并通过它实现了我想要的结果 -

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

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

        【讨论】:

          猜你喜欢
          • 2022-01-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-10-25
          • 1970-01-01
          • 2018-05-26
          • 1970-01-01
          相关资源
          最近更新 更多