Как узнать процент свободного места для подключенных дисков? - PullRequest
6 голосов
/ 29 марта 2010

Возможно ли программно найти свободное место, доступное в подключенных дисках?

Как узнать процент свободного места на диске с помощью ms-dos.
Может быть легко найти свободное место для диска на вашем жестком диске, но мне нужно найти свободное место на подключенных дисках.

Я сопоставил несколько файловых серверов в моих системах.

Это можно увидеть в Моем компьютере, но как показать это в командной строке?

Ответы [ 3 ]

11 голосов
/ 29 марта 2010

(взято из моего старого ответа при сбое сервера)

Самый простой способ надежно получить доступ к свободному месту на диске - использовать WMI. При попытке проанализировать вывод dir вы получите множество смешных проблем, по крайней мере, с версиями Windows на других языках. Вы можете использовать wmic для запроса свободного места на диске:

wmic logicaldisk where "DeviceID='C:'" get FreeSpace

Это выведет что-то вроде

FreeSpace
197890965504

Вы можете принудительно вставить это в одну строку, добавив переключатель /format:value:

> wmic logicaldisk where "DeviceID='C:'" get FreeSpace /format:value

FreeSpace=197890965504

Однако там есть несколько пустых строк (около трех или четырех), которые плохо поддаются обработке. К счастью, команда for может удалить их для нас, когда мы проводим токенизацию:

for /f "usebackq delims== tokens=2" %x in (`wmic logicaldisk where "DeviceID='C:'" get FreeSpace /format:value`) do set FreeSpace=%x

Приятно то, что, поскольку мы используем только второй токен, все пустые строки (у которых нет второго токена) игнорируются.

Не забудьте удвоить знаки % при использовании этого в командном файле:

for /f "usebackq delims== tokens=2" %%x in (`wmic logicaldisk where "DeviceID='C:'" get FreeSpace /format:value`) do set FreeSpace=%%x

Теперь вы можете использовать свободное пространство, которое хранится в переменной окружения %FreeSpace%.


Получение процентов сейчас немного сложнее, поскольку командные файлы поддерживают только 32-разрядные целые числа для вычисления. Однако вам, вероятно, не нужно вычислять это до байта; Я думаю, что мегабайт вполне достаточно:

for /f "usebackq delims== tokens=2" %%x in (`wmic logicaldisk where "DeviceID='C:'" get FreeSpace /format:value`) do set FreeSpace=%%x
for /f "usebackq delims== tokens=2" %%x in (`wmic logicaldisk where "DeviceID='C:'" get Size /format:value`) do set Size=%%x
set FreeMB=%FreeSpace:~0,-6%
set SizeMB=%Size:~0,-6%
set /a Percentage=100 * FreeMB / SizeMB
echo C: is %Percentage% % free

Это должно работать, если ваши объемы не превышают 20 ТиБ.

0 голосов
/ 28 ноября 2015

Вы можете сделать это в современной Windows очень легко, используя PowerShell.

Этот командлет вернет красивую таблицу, содержащую ваши диски и некоторую информацию об их пространстве.

get-psdrive | Where Free*

Name           Used (GB)     Free (GB) Provider      Root                                                                  CurrentLocation
----           ---------     --------- --------      ----                                                                  ---------------
C                 101.65         65.59 FileSystem    C:\                                                                  WINDOWS\system32
D                 801.55        129.96 FileSystem    D:\
R                 443.17       2351.22 FileSystem    R:\
X                 119.28        104.29 FileSystem    X:\

Вероятно, самый простой и короткий способ получить то, что вы ищете. Не забудьте запустить PowerShell, а не cmd.exe, чтобы запустить эти cmds.

get-psdrive | Где бесплатно *

0 голосов
/ 29 марта 2010

Вам нужно GetDiskFreeSpaceEx . Работает с дисками, подключенными дисками и т. Д.

ULARGE_INTEGER free;
ULARGE_INTEGER total;
ULARGE_INTEGER totalFree;
BOOL           ok;

ok = GetDiskSpaceFreeEx(path, &free, &total, &totalFree);
if (ok)
{
// do your sums here, then printf the result
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...