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

标签 powershell

我正在使用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/

相关文章:

windows - 在 3 个不同的子目录中创建 2 个子目录

powershell - 使用powershell生成日期并保存到批处理变量时如何设置日期格式?

Powershell:你如何在一个管道中读写 I/O?

docker - (如何)我可以在 docker 容器中运行 Windows Defender 吗?获取错误

string - 在空格上拆分字符串但忽略双引号之间的部分

powershell - Format-Table 根据输出缓冲区宽度设置列宽

git - 无法在 TFS 构建管道中的 PowerShell 上运行 Git pull

xml - 获取具有 "name"属性的 XML 元素的标记名称

regex - 使用 Powershell 打印出与 RegEx 匹配的代码行号

powershell - 使用robocopy搜索子目录