Когда партия, если сравнение сделано численно
Я посмотрел, но не могу найти спецификацию точно, когда сравнение IF пакетного файла с использованием числового сравнения (например, гтп) выполняется численно вместо обработки его аргументов в виде строк.
Я нашел этот вопрос 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, приведенный выше, сделан численно и отражает больше... но ни одна из сторон его сравнения не состоит полностью из цифр.
1 ответ
Если оба аргумента могут быть преобразованы в числовое значение, то сравнение выполняется численно, если ни одна из сторон не заключена в кавычки.
Следовательно, поскольку +1000 и 0x99 оба являются числовыми в соответствии с правилами синтаксического анализа (см. set /?
затем сравнение выполняется численно (строка начинается 0x
интерпретируется как гекс и в противном случае, если он начинается 0
тогда восьмеричный)