簡體   English   中英

使用 wmic 獲取驅動器空間信息

[英]Using wmic to get drives space information

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

我遇到了許多甚至沒有驅動器的行,我無法格式化值,因此我可以計算百分比,或以正常格式顯示值

這可能對您有用:代碼將添加到批處理文件的底部,並使用

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

正如錯誤消息告訴您的那樣, set僅限於 32 位整數。 如果你能接受MB的准確度,你可以像這樣縮短數字:

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

(它需要除最后 6 個字符之外的字符串)

在數學意義上它可能並不完全正確,但應該足夠好。

當然,您必須以同樣的方式縮短%freeMB%

wmic LogicalDisk where "DeviceID='C:' " Get Size

我嘗試將 deviceID 和大小存儲在一個數組中,但這使得對其進行操作變得非常困難。

FOR /L %%i IN (0,1,%N%) DO  (
   call echo Name = %%deviceID[%%i]%%
   call echo Value = %%size[%%i]%%
   echo %%Value%%
    SET /A  "t=%Value% / %GB%"
    echo %t%
   echo/

你會怎么做?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM