我正在使用2个自定义函数来获取文件的估计文件传输时间。函数1获取文件的文件大小,然后将该文件大小传递给函数2,函数2通过将文件大小除以传输速度来获得总文件传输时间。
问题是-函数1返回一个[String]:即。 12 GB,232.13 MB。 15 KB,等等。
功能#2期望[Double]作为参数数据类型。
这给了我一个值转换错误:
Cannot convert value "4.13GB" to type "System.Double". Error: "Input string was not in a correct format."
令人困惑的是,如果我直接从命令行调用功能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,以使Function#2接受该值?
最佳答案
'2.5kb'
与2.5kb
不同,同样,'2*3'
与2*3
不同。
您可以在PowerShell Language Specification.中了解有关数字乘法器的信息
如果要在将字符串强制转换为 double 之前求乘数,请将其作为脚本块传递给第二个函数:$sc = [scriptblock]::Create('2.5kb')
。
这种方法的优点是正在解析字符串,因此可以确保第二个函数可以调用它:[double]($sc.Invoke()[0])
。
如果您尝试将不正确的字符串转换为脚本块,则会收到错误消息:[scriptblock]::Create('2.5 kb')
。
关于powershell - 如何在Powershell中将文件大小(字符串)转换为 double ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41817097/