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