когда пакетное сравнение IF выполняется численно

Я просмотрел, но не могу найти точное описание того, когда сравнение пакетного файла с использованием числовой операции сравнения (например, gtr) выполняется численно, а не обрабатывает его аргументы как строки.

Я нашел этот вопрос Ошибка командного файла Windows - Как 30000000000000 может равняться 40000000000? но его объяснение — если у вас есть какие-либо нецифровые символы, то IF выполняет сравнение строк — не является полным. Например:

@echo off& setlocal enabledelayedexpansion
if "123" gtr "99" echo greater
if 099 gtr 10 echo greater
if "+1000" gtr "0x99" echo greater
if 12-1 gtr 3 echo greater
if +1000 gtr 0x99 echo greater

Только последний IF выше выполняется в числовом виде и эхо-сигнал больше... но ни одна из сторон операции сравнения не состоит полностью из цифр.


person Paul Houle    schedule 03.05.2017    source источник


Ответы (1)


Если оба аргумента могут быть преобразованы в числовые, то сравнение выполняется численно, если ни одна из сторон не заключена в кавычки.

Следовательно, поскольку +1000 и 0x99 являются числовыми в соответствии с правилами синтаксического анализа (см. set /?, то сравнение выполняется в числовом виде (строка, начинающаяся с 0x, интерпретируется как шестнадцатеричная, а в противном случае, если она начинается с 0, то восьмеричная)

person Magoo    schedule 03.05.2017