Согласно this, !==!
- это неравномерный строковый оператор.
Попытка, я получаю:
C:\> if "asdf" !==! "fdas" echo asdf
!==! was unexpected at this time.
Что я делаю неправильно?
Согласно this, !==!
- это неравномерный строковый оператор.
Попытка, я получаю:
C:\> if "asdf" !==! "fdas" echo asdf
!==! was unexpected at this time.
Что я делаю неправильно?
Пытаться
if NOT "asdf" == "fdas" echo asdf
Вместо этого используйте NEQ.
if "asdf" NEQ "fdas" echo asdf
Я знаю, что это совсем устарело, но это может быть полезно для тех, кто опаздывает на вечеринку. (EDIT: обновлено, так как это все еще получает трафик, а @Goozak указал в комментариях, что мой первоначальный анализ образца также был неправильным.)
Я вытащил это из кода примера в вашей ссылке:
IF !%1==! GOTO VIEWDATA
REM IF NO COMMAND-LINE ARG...
FIND "%1" C:\BOZO\BOOKLIST.TXT
GOTO EXIT0
REM PRINT LINE WITH STRING MATCH, THEN EXIT.
:VIEWDATA
TYPE C:\BOZO\BOOKLIST.TXT | MORE
REM SHOW ENTIRE FILE, 1 PAGE AT A TIME.
:EXIT0
!%1==!
- просто идиоматическое использование ==
, предназначенное для проверки того, что вещь слева, содержащая вашу переменную, отличается от вещи справа, а это не так. !
в этом случае является просто символьным заполнителем. Это может быть что угодно. Если %1
имеет контент, то равенство будет ложным, если это не так, вы просто сравниваете !
с !
, и оно будет истинным.
!==!
не является оператором, поэтому запись "asdf" !==! "fdas"
довольно бессмысленна.
Предложение использовать if not "asdf" == "fdas"
- это, безусловно, путь.
Try:
if not "asdf" == "fdas" echo asdf
Это работает для меня в Windows XP (я получаю ту же ошибку, что и для кода, который вы отправили).
NEQ обычно используется для чисел, а == обычно используется для сравнения строк.
Я не могу найти документацию, в которой упоминается конкретный и эквивалентный операнд неравенства для сравнения строк (вместо NEQ). Решение, использующее IF NOT ==, кажется наиболее разумным подходом. Я не могу сразу вспомнить обстоятельства, при которых оценка операций в командном файле может вызвать проблему или неожиданное поведение при применении метода сравнения IF NOT == к строкам.
Я хотел бы предложить понимание того, как две функции ведут себя по-разному на более низком уровне - будет ли дизассемблирование отдельных пакетных файлов (использующих NEQ и ЕСЛИ НЕ ==) предлагать какие-либо подсказки, в отношении которых (неофициально задокументировано) родной API-вызов вызывает conhost.exe использует?