如何根据文件大小显示KB,MB或GB文件夹的大小?

时间:2017-08-30 18:28:58

标签: powershell powershell-v2.0

我有一个表单,显示单击按钮时配置文件夹的大小。以下是我为图片文件夹试过的一些代码变体...

    $Pictures_Size = (Get-ChildItem $User\Pictures -recurse | Measure-Object -property length -sum)
    $Pictures_Size_KB = "{0:N2}" -f ($Pictures_Size.sum / 1KB)
    $Pictures_Size_MB = "{0:N2}" -f ($Pictures_Size.sum / 1MB)
    $Pictures_Size_GB = "{0:N2}" -f ($Pictures_Size.sum / 1GB)
    If ($Pictures_Size_KB -gt 1024) { $Pictures_Box.Text = "Pictures - $($Pictures_Size_MB) MB" }
    If ($Pictures_Size_MB -gt 1024) { $Pictures_Box.Text = "Pictures - $($Pictures_Size_GB) GB" }
    Else { $Pictures_Box.Text = "Pictures - $($Pictures_Size_KB) KB" }

    $Pictures_Size = (Get-ChildItem $User\Pictures -recurse | Measure-Object -property length -sum)
    $Pictures_Size_KB = "{0:N2}" -f ($Pictures_Size.sum / 1KB)
    $Pictures_Size_MB = "{0:N2}" -f ($Pictures_Size.sum / 1MB)
    $Pictures_Size_GB = "{0:N2}" -f ($Pictures_Size.sum / 1GB)
    If ($Pictures_Size_MB -ge 1024) { $Pictures_Box.Text = "Pictures - $($Pictures_Size_GB) GB" }
    If ($Pictures_Size_MB -lt 1024) { $Pictures_Box.Text = "Pictures - $($Pictures_Size_MB) MB" }
    If ($Pictures_Size_KB -lt 1024) { $Pictures_Box.Text = "Pictures - $($Pictures_Size_KB) KB" }

我测试的图片文件夹是5 MB,但它显示为0.00 GB,我无法弄清楚原因。在第一个代码示例中,如果我取出If ($Pictures_Size_MB -gt 1024)行,它会在5.05 MB正确显示大小。我不确定是什么错误,因为5小于1024所以它不应该显示GB编号。

请注意,这也需要在Windows 7中运行!

谢谢!

4 个答案:

答案 0 :(得分:1)

答案 1 :(得分:1)

当您使用-f运算符时,您的输出(此处存储在$Pictures_Size_MB中)的类型为System.String,因此比较运算符不会按预期工作。

首先尝试数学,然后进行格式化。像这样:

$Pictures_Size = (Get-ChildItem $User\Pictures -recurse | Measure-Object -property length -sum).sum
if ($Pictures_Size -gt 1TB) { 
    # Output as double
    [System.Math]::Round(($Pictures_Size / 1TB), 2) 
    # Or output as string
    "{0:N2} TB" -f ($Pictures_Size / 1TB)
}

答案 2 :(得分:0)

$Pictures_Size_MB包含字符串"5.05",大于整数1024,这就是满足条件的原因。

答案 3 :(得分:0)

您正在使用字符串格式化程序,因此将变量值存储为字符串。删除不必要的"{0:N2} -f",而是使用[Math]::Round()