【问题标题】:Filtering command expression results for later use in script过滤命令表达式结果以供以后在脚本中使用
【发布时间】:2014-12-24 06:57:18
【问题描述】:

我正在使用命令“typeperf”来表示特定程序使用的带宽(在本例中为 spotify)。我需要从 typeperf 命令重复检索一个数值,但 typeperf 的输出包含不需要的文本。根据我的研究,我使用“For /F”将 typeperf 输出存储到一个变量中,但似乎 typeperf 的多行输出,并且可能它的计算时间导致了我没想到的结果。如何让变量“bndwdth”保存值“44433.214648”?


基本命令:

typeperf "\Process(spotify)\IO Data Bytes/sec" -sc 1

输出:

"(PDH-CSV 4.0)","\\name\Process(spotify)\IO Data Bytes/sec"
"10/28/2014 10:31:09.250","44433.214648"

尝试的解决方案:

For /F "Tokens=2 delims=," %I in ('typeperf "\Process(spotify)\IO Data Bytes/sec" -sc 1') Do Set bndwdth=%I

输出:

C:\Users\name\Desktop>Set bndwdth="\\name\Process(spotify)\IO Data Bytes/sec"


C:\Users\name\Desktop>Set bndwdth="44433.214648"

C:\Users\name\Desktop>Set bndwdth= please wait...

感谢您的帮助!

【问题讨论】:

    标签: variables batch-file command-line scripting command-prompt


    【解决方案1】:

    大概您的实际代码在每次迭代时都会回显该值,以便您获得多行输出。

    您可以使用 FINDSTR 过滤掉不需要的行。

    for /f "tokens=2 delims=," %I in (
      'typeperf "\Process(spotify)\IO Data Bytes/sec" -sc 1^|findstr /rc:"../../.... ..:..:.."'
    ) do set "bndwdth=%I"
    

    根据评论更新

    | 是管道运算符,它将左侧命令的输出作为输入引导到右侧命令。 | 在 FOR /F IN() 子句中使用。该子句经过了额外的解析层,因此| 必须转义为^|

    FINDSTR /RC:"string" 选项等效于 /R /C:"string"/C:"string" 选项有两个作用: 1) 它将整个字符串视为单个搜索词,即使有空格。 2) 它默认将字符串视为文字搜索。 /R 选项覆盖默认值并导致搜索被视为正则表达式。

    【讨论】:

    • 谢谢,这很有帮助。您介意解释一下“1^”部分的作用吗?另外,你能澄清一下 findstr 中的“r”标志是什么意思吗?我发现“/r:使用搜索字符串作为正则表达式。Findstr 将所有元字符解释为正则表达式,除非你使用 /l”,但是作为只有编程经验的人在 matlab 中这有点难以理解。再次感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多