过滤命令表达式结果以供稍后在脚本中使用

时间:2014-10-28 18:19:59

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

我正在使用命令“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...

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

据推测,您的实际代码每次迭代都会调整值,以便您获得多行输出。

您可以使用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选项会覆盖默认值,并使搜索被视为正则表达式。