Powershell 如何忽略字母/单词?

Powershell 如何忽略字母/单词?,powershell,Powershell,假设我有以下代码: $size = 23.9 $size = "$size GB" write $size 我想对其他事情使用相同的变量,例如 if ($size -lt 20) {...} 这显然是一个问题,因为这里的$size有GB/是一个字符串 如何忽略字符串部分 我在找这样的东西: if($($size -replace ("anything after the numbers", "")) -lt 20) {....} 如果坚持使用字符串并使用-replace运算符,则可以使用以

假设我有以下代码:

$size = 23.9
$size = "$size GB"
write $size
我想对其他事情使用相同的变量,例如

if ($size -lt 20)
{...}
这显然是一个问题,因为这里的$size有GB/是一个字符串

如何忽略字符串部分

我在找这样的东西:

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

如果坚持使用字符串并使用-replace运算符,则可以使用以下方法:

[double]($size -replace "[^\d\.]+$")
如果维护int或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'
    }
}

如果坚持使用字符串并使用-replace运算符,则可以使用以下方法:

[double]($size -replace "[^\d\.]+$")
如果维护int或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'
    }
}


只需使用Write output$size GB,而不是将输出字符串保存到变量。此外,避免使用别名,例如:在scripts@MasonSchmidgall没有写只是为了简单的样品在这里。我实际上使用的是一个自定义对象,但在这里它并不重要,我试图做一些其他的事情,这就是为什么我需要替换字符串。我建议将数值与自定义对象中的单位分开。这将为您节省大量代码。@MasonSchmidgall ya,管理员的回答让我对这一点有了另一个见解……我认为$unit是一个很好的方法,与其将输出字符串保存到变量,不如使用Write output$size GB。此外,避免使用别名,例如:在scripts@MasonSchmidgall没有写只是为了简单的样品在这里。我实际上使用的是一个自定义对象,但在这里它并不重要,我试图做一些其他的事情,这就是为什么我需要替换字符串。我建议将数值与自定义对象中的单位分开。这将为您节省大量代码。@MasonSchmidgall ya,管理员的回答让我对这一点有了另一个见解……我认为$unit是一个很好的方法,可以在pscustom对象动态中使用unit部分吗?基于这个答案,硬编码GB的isntead是否可以是条件单位?当然但你需要你的初始单位是一致的。我添加了一个代码片段,可以做类似的事情。哦,我的意思是在pscutomobject内部…例如,[pscustomobject]@{Size=23.9;Unit='KB'?'MB'?'GB'}当然可以。我添加了一个代码段来实现这一点。是if语句吗?有可能在pscustom对象中包含单元部分吗?基于这个答案,硬编码GB的isntead是否可以是条件单位?当然但你需要你的初始单位是一致的。我添加了一个代码片段,可以做类似的事情。哦,我的意思是在pscutomobject内部…例如,[pscustomobject]@{Size=23.9;Unit='KB'?'MB'?'GB'}当然可以。我添加了一个代码段来实现这一点。是if语句吗?