Пакетные файлы сравнивают числа

Я должен написать скрипт, который проверяет, достаточно ли места на диске. Я написал следующее:

@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
Другие вопросы по тегам