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

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

Как найти процент свободного пространства в Вашем диске с помощью MS-DOS.
Может быть легко найти свободное пространство для диска в Вашем жестком диске, но я должен найти свободное пространство сетевых дисков.

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

Возможно видеть это в Моем Компьютере, но как действительно показывают его в командной строке?

6
задан Binary Worrier 29 March 2010 в 15:51
поделиться

2 ответа

(Взято из моего старого ответа на 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 ТиБ.

11
ответ дан 9 December 2019 в 22:31
поделиться

Вам потребуется 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
}
0
ответ дан 9 December 2019 в 22:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: