Antworten:
Versuchen
if NOT "asdf" == "fdas" echo asdf
Verwenden Sie stattdessen NEQ.
if "asdf" NEQ "fdas" echo asdf
Ich weiß, dass dies ziemlich veraltet ist, aber dies könnte immer noch nützlich sein für diejenigen, die zu spät zur Party kommen. (BEARBEITEN: aktualisiert, da dies immer noch Verkehr bekommt und @Goozak in den Kommentaren darauf hingewiesen hat, dass meine ursprüngliche Analyse der Stichprobe ebenfalls falsch war.)
Ich habe dies aus dem Beispielcode in Ihrem Link gezogen:
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==!
ist einfach eine idiomatische Verwendung von ==
, um zu überprüfen, ob sich das Objekt links, das Ihre Variable enthält, von dem Objekt rechts unterscheidet, das dies nicht tut. Das ist !
in diesem Fall nur ein Zeichenplatzhalter. Es könnte alles sein. Wenn %1
Inhalt hat, dann wird die Gleichheit falsch sein, wenn es nicht werden Sie nur seinen Vergleich !
zu !
und wird es wahr sein.
!==!
ist kein Operator, daher ist das Schreiben "asdf" !==! "fdas"
ziemlich unsinnig.
Der zu verwendende Vorschlag if not "asdf" == "fdas"
ist definitiv der richtige Weg.
!
werden hier verwendet, falls %1
leer ist, was zu dem Test führt !==!
, der wahr ist. Sie können %1.==.
stattdessen verwenden (fast jedes Zeichen würde dies tun) - um sicherzustellen, dass beide Seiten des Gleichheitstests etwas zu testen haben. Die !==!
Notation ist definitiv NICHT ein nicht-Gleichheitszeichen. Bleib lieber bei if not ...
.
Versuchen:
if not "asdf" == "fdas" echo asdf
Das funktioniert bei mir unter Windows XP (ich erhalte den gleichen Fehler wie Sie für den von Ihnen geposteten Code).
NEQ wird normalerweise für Zahlen verwendet und == wird normalerweise für den Zeichenfolgenvergleich verwendet.
Ich kann keine Dokumentation finden, in der ein spezifischer und äquivalenter Ungleichungsoperand für den Zeichenfolgenvergleich (anstelle von NEQ) erwähnt wird. Die Lösung mit IF NOT == scheint der fundierteste Ansatz zu sein. Ich kann mir nicht sofort einen Umstand vorstellen, unter dem die Auswertung von Vorgängen in einer Batchdatei ein Problem oder unerwartetes Verhalten verursachen würde, wenn die Vergleichsmethode IF NOT == auf Zeichenfolgen angewendet wird.
Ich wünschte, ich könnte einen Einblick in das unterschiedliche Verhalten der beiden Funktionen auf einer niedrigeren Ebene geben - würde das Zerlegen separater Batchdateien (die NEQ und IF NOT == verwenden) Hinweise darauf geben, welche (inoffiziell dokumentierten) nativen APIs conhost.exe aufrufen nutzt?