Когда партия, если сравнение сделано численно

Я посмотрел, но не могу найти спецификацию точно, когда сравнение 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тогда восьмеричный)

Другие вопросы по тегам