Ответы:
Пытаться
if NOT "asdf" == "fdas" echo asdf
Вместо этого используйте NEQ.
if "asdf" NEQ "fdas" echo asdf
Я знаю, что это довольно устарело, но это может быть полезно для тех, кто опаздывает на вечеринку. (РЕДАКТИРОВАТЬ: обновлено, поскольку это все еще получает трафик, и @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"
, безусловно, путь.
!
Используются здесь в случае %1
пусто, таким образом , в результате испытания !==!
, это верно. Вы можете использовать %1.==.
вместо этого (подходит почти любой символ), чтобы убедиться, что обе стороны теста на равенство имеют что-то для тестирования. !==!
Обозначения определенно НЕ не-знак равенства. Лучше придерживаться if not ...
.
Пытаться:
if not "asdf" == "fdas" echo asdf
Это работает для меня в Windows XP (я получаю ту же ошибку, что и вы для кода, который вы разместили).
NEQ обычно используется для чисел, а == обычно используется для сравнения строк.
Я не могу найти документацию, в которой упоминается конкретный и эквивалентный операнд неравенства для сравнения строк (вместо NEQ). Решение, использующее IF NOT ==, кажется наиболее разумным подходом. Я не могу сразу думать об обстоятельствах, при которых оценка операций в пакетном файле может вызвать проблему или неожиданное поведение при применении метода сравнения IF NOT == к строкам.
Я хотел бы предложить понимание того, как две функции ведут себя по-разному на более низком уровне - будет ли дизассемблирование отдельных пакетных файлов (использующих NEQ и ЕСЛИ НЕ ==) предлагать какие-либо подсказки, в отношении которых (неофициально задокументировано) родной API-вызов вызывает conhost.exe использует?