如何在Powershell中将文件大小(字符串)转换为double?

时间:2017-01-23 22:50:10

标签: powershell

我使用2个自定义函数来获取文件的估计文件传输时间。函数#1获取文件的文件大小,然后将该文件大小传递给函数#2,它通过将文件大小除以传输速度来获得文件传输总时间。

问题是 - 函数#1返回[String]:即。 12 GB,232.13 MB。 15 KB等...

函数#2期望[Double]作为参数数据类型。

这给了我一个价值转换错误:

  

无法转换价值" 4.13GB"输入" System.Double"。错误:"输入   字符串的格式不正确。"

令人困惑的部分是,如果我直接从命令行调用函数#2 - 我可以输入4.13GB并执行计算。你甚至可以用Powershell命令做简单的数学运算:即。 4.13GB / 3,它将返回结果。

以下是我的脚本示例:

$filesize = Get-FileSize ('myfile.txt') # This outputs "4.13GB"
$transfertime = Get-Transfertime -Size $filesize -Speed 5.5mb -Overhead 10

Powershell中的文件大小似乎是双倍的。如何将$ filesize变量转换为DOUBLE,以便函数#2接受值?

1 个答案:

答案 0 :(得分:1)

'2.5kb'2.5kb不同'2*3'2*3不同。 您可以在PowerShell Language Specification.

中阅读有关数字乘数的信息

如果要在将字符串转换为double之前评估乘数,请将其作为scriptblock传递给第二个函数: $sc = [scriptblock]::Create('2.5kb')。 这种方法的优点是正在解析字符串,因此您可以确保第二个函数可以将其调用: [double]($sc.Invoke()[0])。 如果您尝试将错误的字符串转换为scriptblock,则会收到错误消息: [scriptblock]::Create('2.5 kb')