Действительно ли возможно программно найти свободное пространство доступным в сетевых дисках?
Как найти процент свободного пространства в Вашем диске с помощью MS-DOS.
Может быть легко найти свободное пространство для диска в Вашем жестком диске, но я должен найти свободное пространство сетевых дисков.
Я отобразил некоторые файловые серверы в своих системах.
Возможно видеть это в Моем Компьютере, но как действительно показывают его в командной строке?
(Взято из моего старого ответа на at Server Fault)
Самый простой способ получить свободное место на диске - это использовать WMI. При попытке проанализировать вывод dir
вы получаете всевозможные забавные проблемы, по крайней мере, с версиями Windows на других языках. Вы можете использовать wmic
, чтобы запросить свободное пространство на диске:
wmic logicaldisk where "DeviceID='C:'" get FreeSpace
Это выведет что-то вроде
FreeSpace
197890965504
. Вы можете принудительно записать это в одну строку, добавив / format: value
switch:
> 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 ТиБ.
Вам потребуется 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
}