获取两个字符串或带有空格的字符之间的值

时间:2013-11-26 12:02:42

标签: regex powershell

您好我创建了一个简单的PowerShell脚本来分析卷的碎片级别以进行监控:

cd /
$c1 = defrag c: -a | findstr 'fragmented'
$c1.split('=')[1].trim()

我得到的结果是0%10%,它是一位数或两位数。我想要的是一个正则表达式命令来获取数值。我仍然可以为%添加另一个拆分命令但是希望正则表达式可以在没有多个拆分的情况下执行此操作

请注意,如果没有split命令,原始结果将在开头和等号后面显示空格。

        Total fragmented space      = 0%

3 个答案:

答案 0 :(得分:1)

正则表达式解决方案可能如下所示:

$text = '10%'
$text -replace '(\d{1,2})%','$1'

10

但老实说,这对于所需要的东西来说太复杂了。您可以轻松修改现有脚本,以便像这样修剪%:

$c1.split('=')[1].trim(' %')

答案 1 :(得分:1)

这样的事情应该有效:

$fragmentation = (defrag c: /a) -match '%$' -replace '.*= (\d)%$','$1'

-match操作将输出限制为仅以%结尾的行,-replace操作从这些行中提取数值。由于说明碎片级别的行是唯一具有百分比值的行,因此结果是碎片的数值。

我不得不同意@alroc:使用WMI是解决问题的更好方法。

答案 2 :(得分:-1)

简单地删除你得到的最后一个角色:

SET pct=$c1.split('=')[1].trim()
echo %pct:~0,-1%