【问题标题】:what is the actual free space on windows C driveWindows C 驱动器上的实际可用空间是多少
【发布时间】:2013-12-21 20:56:45
【问题描述】:

我有一个批处理脚本,我需要确保我有至少 3 GB 的可用空间。

要通过命令行获取可用空间,请键入:

fsutil volume diskfree C: | find /i "avail free"
Total # of avail free bytes  : 872762081280

这是字节数,当您在 C 驱动器上“右键单击”->“属性”时同样会显示该字节数。

但是,当我在 C 驱动器上“右键单击”->“属性”时,在 872,762,081,280 旁边,它显示的 GB 值只有 812GB 可用空间。这与 872762081280 的字节值截然不同。

我认为这可能是由于 1024bytes = 1kb windows 转换造成的。但是,此转换将显示我有 852,306,720kb 可用(或 852GB),但仍不接近“本地磁盘 (C:) 属性”窗口显示的 812GB。

有谁知道 Windows 使用的数学运算将 872,762,081,280 字节转换为 812GB 吗?

【问题讨论】:

  • 批处理数学只能处理最大 2 GB 的整数 - 您需要在批处理文件中使用 VBS 脚本来计算或使用例程将数字处理成可管理的块。

标签: windows batch-file storage hard-drive


【解决方案1】:

1 KB 有 1024 个字节,1 MB 有 1024 KB,1 GB 有 1024 MB,所以:

872762081280 bytes           1 KB              1 MB          1 GB
                       x    -------       x   ------   x    -----     = 812 GB
                            1024 bytes        1024 KB       1024 MB

注意 KB、MB 和 GB 的使用遵循 JEDEC 内存标准命名法

根据 IEC 60027 表示法,这些将由 KiB、MiB 和 GiB 表示

这很容易混淆,因为它们都使用 1024 的倍数,但十进制命名法使用相同的 KB、MB 和 GB,但使用的是 1000 的倍数,就像某些磁盘制造商使用的那样

【讨论】:

  • 前缀 K、M、G 早在它们以不兼容的方式用于定义内存容量之前就已经有了完善的定义。很多人不同意我的观点,但我认为磁盘制造商使用了正确的术语,而 Windows 是不正确的。
【解决方案2】:
872762081280 / 1024 / 1024 / 1024 = 812

【讨论】:

  • @user7236293 此答案的目标受众是那些已经知道答案的人。因此,这是完全合理的。哦等等。
  • @user7236293,问题是“有谁知道 Windows 正在使用的数学运算”,我展示了它。答案很简单,但很完整。
【解决方案3】:

您可以通过这种方式获得以 GB 为单位的可用空间数:

for /F "tokens=2 delims=:" %%a in ('fsutil volume diskfree C: ^| find /i "avail free"') do set bytes=%%a
set /A GB=%bytes:~0,-3%/1024*1000/1024/1024
echo GB=%GB%

【讨论】:

    【解决方案4】:

    最简单的方法是记住 KB、MB 和 GB 是基于 2 的幂。

        1 KB = 2^10 (2 to the 10th power or 1,024 bytes)
        1 MB = 2^20 (2 to the 20th power or 1,048,576 bytes)
        1 GB = 2^30 (2 to the 30th power or 1,073,741,824 bytes)
    

    您需要做的就是将您的大数除以 2^30 以获得您的 GB 数。

        Your value: 872,762,081,280 bytes
        KB............  MB..........  GB.........
           852306720.0      832330.8      812.823
    

    【讨论】:

      【解决方案5】:
      @echo off
      setlocal
      set drive=C
      set free=?
      
      rem Note: WMIC will output unicode text
      wmic logicaldisk where (caption = "%drive%:") get freespace>"%temp%\free.tmp"
      for /f %%A in ('type "%temp%\free.tmp"') do (set free=%%A)
      
      SET free=%free:~0,7%
      SET /a "free=(((free/1024)*1000)/1024*100)/1024"
      ::SET free=%free:~7,5%
      echo Free space: %free% Gb
      rem if exist "%temp%\free.tmp" del "%temp%\free.tmp"
      
      pause
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-06-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-07-18
        • 1970-01-01
        相关资源
        最近更新 更多