Пакетный оператор неравенства (неравенства) - PullRequest
236 голосов
/ 14 сентября 2009

Согласно это , !==! является оператором неравных строк. Пробуя это, я получаю:

C:\> if "asdf" !==! "fdas" echo asdf
!==! was unexpected at this time.

Что я делаю не так?

Ответы [ 5 ]

450 голосов
/ 14 сентября 2009

Попробуйте

if NOT "asdf" == "fdas" echo asdf
93 голосов
/ 14 сентября 2009

Используйте взамен NEQ.

if "asdf" NEQ "fdas" echo asdf
28 голосов
/ 27 июля 2011

Я знаю, что это довольно устарело, но это может быть полезно для тех, кто опаздывает на вечеринку. (РЕДАКТИРОВАТЬ: обновлено, поскольку это все еще получает трафик, и @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" - определенно правильный путь.

21 голосов
/ 14 сентября 2009

Попробуйте:

if not "asdf" == "fdas" echo asdf

Это работает для меня в Windows XP (я получаю ту же ошибку, что и вы, для кода, который вы разместили).

0 голосов
/ 23 января 2019

NEQ обычно используется для чисел, а == обычно используется для сравнения строк.

Я не могу найти никакой документации, в которой упоминается конкретный и эквивалентный операнд неравенства для сравнения строк (вместо NEQ). Решение, использующее IF NOT ==, кажется наиболее разумным подходом. Я не могу сразу вспомнить обстоятельства, при которых оценка операций в пакетном файле может вызвать проблему или неожиданное поведение при применении метода сравнения IF NOT == к строкам.

Хотелось бы, чтобы я мог дать представление о том, как две функции ведут себя по-разному на более низком уровне - будет ли дизассемблирование отдельных пакетных файлов (которые используют NEQ и IF NOT ==) предлагать какие-либо подсказки, в отношении которых (неофициально задокументированы) вызовы нативного API conhost.exe использует?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...