Пакетные файлы сравнивают числа
Я должен написать скрипт, который проверяет, достаточно ли места на диске. Я написал следующее:
@echo off
set gbsize = 1,073,741,824
Set gbsize=%gbsize:,=%
for /f "tokens=3" %%a in ('dir c:\') do (
set /a bytesfree=%%a
)
set bytesfree=%bytesfree:,=%
endlocal && set bytesfree=%bytesfree%
If %gbsize% gtr %bytesfree% echo hi
но когда в скрипте выдается ошибка: неверный номер. Числовые константы могут быть десятичными (17), шестнадцатеричными (0x11) или восьмеричными (021).
Что я упустил? кто-нибудь может помочь? Спасибо!
1 ответ
Решение
Ваша непосредственная проблема - попытка использовать SET /A, когда в вашем значении есть запятые.
Вам также нужно удалить пробелы до и после = при определении gbsize.
Я не понимаю, почему у вас есть endlocal без setlocal
Я считаю, что это то, что вы искали. Это будет эхо "привет", если есть меньше чем 1 ГБ свободного места.
@echo off
setlocal
set gbsize=1,073,741,824
Set gbsize=%gbsize:,=%
for /f "tokens=3" %%a in ('dir c:\') do set bytesfree=%%a
set bytesfree=%bytesfree:,=%
If %gbsize% gtr %bytesfree% echo hi
Другой, более прямой (и, возможно, более точный?) Способ получить свободное место
for /f "tokens=2" %%S in ('wmic volume get DriveLetter^, FreeSpace^|find "C:"') do set bytesfree=%%S