7

У меня есть сценарий .bat, который запускается при включении выделенного сервера резервного копирования, сохраняет продуктивную среду с помощью Robocopy и завершает работу сервера по завершении.

Он выполняет некоторые проверки перед сохранением и запрашивает соответствующие меры, когда что-то не в порядке, например, когда целевой случай JBOD не был обнаружен из-за отключения питания.

Однако есть еще одна оговорка, с которой я до сих пор не смог справиться.

Как я могу проверить в файле .bat, достаточно ли у меня места на целевых дисках для приема всех файлов или нет? (Можно проверять фиксированный размер пространства, периодически изменяемый; в настоящее время он составляет около 100 ГБ.)

Это вообще возможно? Если да, то какую команду мне нужно исследовать?

2 ответа2

12

Я предлагаю использовать сценарий PowerShell для этого.

wmic возвращает размер в байтах, пакет ограничивается сравнением чисел со знаком 32-разрядных целых чисел, намного меньше 100 ГБ. Вы должны были бы сократить число сначала.

PowerShell

if ((Get-WMIObject Win32_Logicaldisk -filter "deviceid='C:'").FreeSpace -gt 100GB){
  "yes enough free space"
} else {
  "not enough free space"
}

Я должен расширить приведенную выше информацию о сравнении номеров в партии.
Если числа содержатся в одинаковых по длине строках, их можно сравнивать как строки.
Сравнение строк происходит посимвольно, начальный пробел / ноль меньше 1.

На данный момент наибольший размер жесткого диска составляет 10 ТБ = 10995116277760 байт, занимающих 14 десятичных знаков - в следующем пакете используются 15 мест для всех чисел.

@Echo off
Rem        543210987654321
Set "Blank=               "
Set "GB100=   107374182400"
Set "TB_10= 10995116277760"

for /f "tokens=2" %%A in (
  'wmic LogicalDisk Get DeviceID^,FreeSpace ^| find /i "C:"'
) Do Set "FreeSpace=%Blank%%%A"
Set "FreeSpace=%FreeSpace:~-15%"

Echo FreeSpace="%FreeSpace%"
Echo    100 GB="%GB100%"

If "%FreeSpace%" gtr "%GB100%" (
  Echo yes enough free space
) else (
  Echo not enough free space
)

Образец вывода:

> Check-FreeSpace.cmd
FreeSpace="   101606346752"
   100 GB="   107374182400"
not enough free space

> Check-FreeSpace.cmd
FreeSpace="  1181504520192"
   100 GB="   107374182400"
yes enough free space
8

Самый простой способ - посмотреть на последнюю строку в выводе dir

dir /-c /w C: | find "bytes free"

Однако это не надежно. Также обратите внимание, что иногда у вас много свободного пространства, но вы не можете больше записывать файлы, потому что вы достигли некоторых ограничений, таких как максимальный размер файла или максимальное количество файлов в томе / каталоге ...

Самый правильный путь

wmic LogicalDisk where DeviceID='C:' Get FreeSpace /value

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .