Есть ли уже способ проверить свободное место на жестком диске в пакетном скрипте?
Я бы предпочел не использовать сторонние приложения, так как мне нужно заполнить много форм, и в этом случае я думаю, что сам напишу небольшое приложение.
Самый простой способ надежно получить свободное место на диске - использовать 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%
.
Вот сценарий для проверки вашего c-диска
echo C-drive Free Space >> CDrive.txt
dir c:\|find /i "bytes free" >> CDrive.txt