Odpowiedzi:
Próbować
if NOT "asdf" == "fdas" echo asdf
Zamiast tego użyj NEQ.
if "asdf" NEQ "fdas" echo asdf
Wiem, że to dość nieaktualne, ale może być przydatne dla osób spóźniających się na przyjęcie. (EDYCJA: zaktualizowana, ponieważ ruch nadal jest generowany, a @Goozak zauważył w komentarzach, że moja pierwotna analiza próbki również była nieprawidłowa).
Ściągnąłem to z przykładowego kodu w twoim linku:
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==!
to po prostu idiomatyczne użycie ==
mające na celu sprawdzenie, czy rzecz po lewej stronie, która zawiera twoją zmienną, różni się od rzeczy po prawej, która tego nie robi. W !
tym przypadku jest to tylko symbol zastępczy znaku. To może być cokolwiek. Jeśli %1
ma treść, to równość będzie fałszywe, jeśli nie będziesz po prostu być porównanie !
do !
i będzie to prawda.
!==!
nie jest operatorem, więc pisanie "asdf" !==! "fdas"
jest dość nonsensowne.
Sugestia użycia if not "asdf" == "fdas"
jest zdecydowanie najlepszym rozwiązaniem.
!
Stosowane są tutaj w razie %1
jest pusta, co skutkuje w teście !==!
, który jest prawdziwy. Możesz użyć %1.==.
zamiast tego (zrobiłaby to prawie każda postać) - celem jest upewnienie się, że obie strony testu równości mają coś do przetestowania. !==!
Notacja jest zdecydowanie NIE nie-znak równości. Lepiej trzymaj się if not ...
.
Próbować:
if not "asdf" == "fdas" echo asdf
Działa to dla mnie w systemie Windows XP (pojawia się taki sam błąd jak w przypadku opublikowanego kodu).
NEQ jest zwykle używane do liczb, a == jest zwykle używane do porównywania ciągów.
Nie mogę znaleźć żadnej dokumentacji, która wymienia konkretny i równoważny operand nierówności do porównywania ciągów (zamiast NEQ). Rozwiązanie wykorzystujące IF NOT == wydaje się najbardziej rozsądnym podejściem. Nie mogę natychmiast pomyśleć o okolicznościach, w których ocena operacji w pliku wsadowym spowodowałaby problem lub nieoczekiwane zachowanie podczas stosowania metody porównywania IF NOT == do ciągów.
Chciałbym móc zaoferować wgląd w to, jak te dwie funkcje zachowują się inaczej na niższym poziomie - dezasemblowanie oddzielnych plików wsadowych (które używają NEQ i JEŻELI NIE ==) oferuje wszelkie wskazówki, w odniesieniu do których (nieoficjalnie udokumentowane) natywne API wywołuje conhost.exe wykorzystuje?