Пакетные файлы сравнивают числа - PullRequest
0 голосов
/ 01 февраля 2012

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

@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 Ответ

4 голосов
/ 01 февраля 2012

Ваша непосредственная проблема - попытка использовать SET / A, когда в вашем значении есть запятые.

Вам также необходимо удалить пробелы до и после = при определении размера gbsize.

Iне понимаю, почему у вас есть 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
...