как найти процент свободного места на дисках?
можно ли программно найти свободное пространство на дисках?
Как найти процент свободного места на диске с помощью 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 / где бесплатно*