首页 > 解决方案 > 如何忽略字母/单词?

问题描述

假设我有以下代码:

$size = 23.9
$size = "$size GB"
write $size

我想为其他事情使用相同的变量,即

if ($size -lt 20)
{...}

这显然是一个问题,因为$size这里有 GB/是一个字符串

我如何忽略字符串部分?

我正在寻找这样的东西:

if($($size -replace ("anything after the numbers", "")) -lt 20)
{....}

标签: powershell

解决方案


如果您坚持使用字符串并与-replace运算符保持一致,则可以使用以下内容:

[double]($size -replace "[^\d\.]+$")

int如果您维护类似or的数值类型double,您可以使用其他方式来处理您的数据。您仍然可以在保持$size双精度的同时输出字符串。

$size = 23.9
$unit = 'GB'
"{0} {1}" -f $size,$unit
23.9 GB

与上述示例非常相似的概念是创建$size为自定义对象。

$size = [pscustomobject]@{Size = 23.9; Unit = 'GB'}
"{0} {1}" -f $size.Size,$size.Unit

您可以进行动态单元分配。如果我们假设您从字节大小开始,您可以分配单位并进行转换。

if ($size -ge 1GB)
{
    $newSize = [pscustomobject]@{
        Size = $size/1GB; Unit = 'GB'
    }
}
elseif ($size -ge 1MB)
{
    $newSize = [pscustomobject]@{
        Size = $size/1MB; Unit = 'MB'
    }
}
elseif ($size -ge 1KB)
{
    $newSize = [pscustomobject]@{
        Size = $size/1KB; Unit = 'KB'
    }
}
else
{
    $newSize = [pscustomobject]@{
        Size = $size; Unit = 'B'
    }
}

推荐阅读