2014-10-28 57 views
0

我使用“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 

Outpu T:

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... 

感谢您的帮助!

回答

0

假设你的实际代码为了获得多行输出,每次迭代ECHO值。

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

+0

谢谢,这是非常有帮助的。你介意解释“1 ^”部分的作用吗?另外,你能澄清一下“r”标志在findstr中的含义吗?我发现“/ r:使用搜索字符串作为正则表达式,Findstr将所有元字符解释为正则表达式,除非您使用/ l”,但作为只有编程经验的人在matlab中,这有点难以理解。再次感谢! – user4179133 2014-10-29 16:25:45

+0

@ user4179133 - 查看已更新的答案 – dbenham 2014-10-29 21:02:49