【问题标题】:Using wmic to get drives space information使用 wmic 获取驱动器空间信息
【发布时间】:2014-07-15 09:30:14
【问题描述】:

我正在尝试使用 wmic 获取计算机中物理驱动器的信息,以获得如下信息:

Drive C:
500 GB Total
100 GB Free
20% Free

Drive D:
500 GB Total
100 GB Free
20% Free

到目前为止我的代码是:

for /f "usebackq tokens=*" %%a in (`wmic logicaldisk where "drivetype=3" get caption`) do (
echo "Drive=%%a"
for /f "usebackq delims== tokens=2" %%x in (`wmic logicaldisk where DeviceID='%%a'"       
get FreeSpace /format:value`) do set FreeSpace=%%x
for /f "usebackq delims== tokens=2" %%x in (`wmic logicaldisk where "DeviceID='%%a'" get Size /format:value`) do set Size=%%x
echo FreeMB=%FreeSpace%
echo SizeMB=%Size%
set /a Percentage=100 * %FreeSpace% / %Size%
echo %%a is %Percentage% %% free
)

我的输出是:

"Drive=Caption
No Instance(s) Available.
No Instance(s) Available.
FreeMB=9193357312
SizeMB=80024170496
Invalid number.  Numbers are limited to 32-bits of precision.
 is  % free
"Drive=C:
No Instance(s) Available.
No Instance(s) Available.
FreeMB=9193357312
SizeMB=80024170496
Invalid number.  Numbers are limited to 32-bits of precision.
is  % free
"Drive=E:
No Instance(s) Available.
No Instance(s) Available.
FreeMB=9193357312
SizeMB=80024170496
Invalid number.  Numbers are limited to 32-bits of precision.
 is  % free
"Drive=
No Instance(s) Available.
No Instance(s) Available.
FreeMB=9193357312
SizeMB=80024170496
Invalid number.  Numbers are limited to 32-bits of precision.
 is  % free

我遇到了许多甚至没有驱动器的行,我无法格式化值,因此我可以计算百分比,或以正常格式显示值

【问题讨论】:

    标签: windows batch-file space wmic


    【解决方案1】:

    这可能对你有用:代码将被添加到你的批处理文件的底部,并使用

    call :hdd-info

    在您的代码中显示数据。

    goto :eof
    :code by aGerman - display drive stats and bar graph (REMmed out)
    :hdd-info    
    @echo off &setlocal
    set "GB=1073741824"
    for /f "skip=1 delims=" %%i in ('wmic logicaldisk get DeviceID^,FreeSpace^,Size') do (
      for /f "tokens=1-3" %%j in ("%%i") do call :output %%j %%k %%l
    )
    goto :eof
    :output
    if "%3"=="" (
      rem echo Unable to discover the drive properties.
      goto :eof
    )
    for /f "tokens=1-4" %%i in (
      'mshta vbscript:Execute("CreateObject(""Scripting.FileSystemObject"").GetStandardStream(1).Write(FormatNumber(%3/%GB%, 2) & "" "" & FormatNumber((%3-%2)/%GB%, 2) & "" "" & FormatNumber(%2/%GB%, 2) & "" "" & Round((%3-%2)*50/%3)):Close"^)'
    ) do (
      set "size=      %%i"
      set "used=      %%j"
      set "free=      %%k"
      set /a "nUsed=%%l, nFree=50-%%l"
    )
    echo(
    echo       %1
    echo Size: %size:~-10% GB
    echo Used: %used:~-10% GB
    echo Free: %free:~-10% GB
    :: echo(
    :: for /l %%i in (1 1 %nUsed%) do <nul set /p "=▒"
    :: for /l %%i in (1 1 %nFree%) do <nul set /p "=█"
    :: echo(&echo(&echo(
    goto :eof
    

    【讨论】:

    • 这简直太完美了!谢谢
    • 另一个问题,如果我可以......驱动信息已经在一个 for 循环中以获取其他信息......当我使用你的代码执行时,它失败了,可能是因为 call 命令。有没有办法在没有电话的情况下一起完成这一切?
    • 您想要文本文件中的信息吗?您使用代码的确切方式将决定应用它的最佳方式。
    • 不,我想要屏幕上的信息
    • 我在上面的代码中添加了一个标签 - 将所有代码放在批处理脚本的最底部,并在代码中使用call :hdd-info 来显示信息。
    【解决方案2】:

    正如错误消息告诉您的那样,set 仅限于 32 位整数。如果你能接受MB 的准确度,你可以像这样缩短数字:

    set SizeMB=%size:~0,-6%
    

    (取除最后6个字符以外的字符串)

    在数学意义上可能不太正确,但应该足够好。

    当然你必须以同样的方式缩短%freeMB%

    【讨论】:

    • 将代码更改为设置 SizeMB=%size:~0,-6% echo %Size% set FreeMB=%FreeSpace:~0,-6% echo %FreeMB% set /a Percentage=100 * %FreeMB% / %SizeMB% echo %%a is %Percentage% %% free 但仍然得到这个:“Drive=C: No Instance(s) Available. No Instance(s) Available. 80024170496 91933 is % free跨度>
    【解决方案3】:
    wmic LogicalDisk where "DeviceID='C:' " Get Size
    

    【讨论】:

    • 也添加一些解释。
    • 感谢您提供此代码 sn-p,它可能会提供一些有限的即时帮助。一个适当的解释将通过展示为什么这是解决问题的好方法来极大地提高其长期价值,并使其对有其他类似问题的未来读者更有用。请编辑您的答案以添加一些解释,包括您所做的假设。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-23
    • 2013-01-04
    • 1970-01-01
    • 1970-01-01
    • 2012-05-04
    • 2011-09-14
    相关资源
    最近更新 更多