как найти процент свободного места на дисках?

можно ли программно найти свободное пространство на дисках?

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

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

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

3 ответов


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

самый простой способ надежно получить свободное место на диске - использовать 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 /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 Тиб.


вам нужно 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
}

вы можете сделать это в современных окнах очень легко с помощью 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 / где бесплатно*