328 Stimmen

Stapel-Operator für Nicht-Gleichheit (Ungleichheit)

Según este , !==! ist der Operator für ungleiche Zeichenfolgen. Wenn ich es versuche, erhalte ich:

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

Was mache ich falsch?

615voto

Frank Bollack Punkte 23412

Versuchen Sie

if NOT "asdf" == "fdas" echo asdf

136voto

demoncodemonkey Punkte 11355

Verwenden Sie stattdessen NEQ.

if "asdf" NEQ "fdas" echo asdf

35voto

jatrim Punkte 677

Ich weiß, dass diese Seite schon ziemlich veraltet ist, aber sie könnte für diejenigen, die zu spät zur Party kommen, immer noch nützlich sein. (EDIT: aktualisiert, da dies immer noch viel besucht wird 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 übernommen:

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 das Ding auf der linken Seite, das Ihre Variable enthält, sich von dem Ding auf der rechten Seite, das sie nicht enthält, unterscheidet. Die ! ist in diesem Fall nur ein Zeichenplatzhalter. Es könnte alles Mögliche sein. Wenn %1 einen Inhalt hat, dann ist die Gleichheit falsch, wenn nicht, dann vergleicht man einfach ! a ! und es wird wahr sein.

!==! ist kein Operator, so dass das Schreiben von "asdf" !==! "fdas" ist ziemlich unsinnig.

Der Vorschlag zur Verwendung von if not "asdf" == "fdas" ist definitiv der richtige Weg.

28voto

Dominic Rodger Punkte 93942

Versuchen Sie es:

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

Das funktioniert bei mir unter Windows XP (ich erhalte die gleiche Fehlermeldung wie Sie für den von Ihnen geposteten Code).

8voto

Paul Punkte 71

NEQ wird normalerweise für Zahlen und == für den Vergleich von Zeichenketten verwendet.

Ich kann keine Dokumentation finden, in der ein spezifischer und gleichwertiger Ungleichheitsoperand für den Stringvergleich (anstelle von NEQ) erwähnt wird. Die Lösung mit IF NOT == scheint der vernünftigste Ansatz zu sein. Mir fällt auf Anhieb kein Fall ein, in dem die Auswertung von Operationen in einer Stapeldatei ein Problem oder ein unerwartetes Verhalten bei der Anwendung der Vergleichsmethode IF NOT == auf Zeichenketten verursachen würde.

Ich wünschte, ich könnte Einblick in wie die beiden Funktionen unterschiedlich auf einer niedrigeren Ebene verhalten - würde disassembling separate Batch-Dateien (die NEQ und IF NOT == verwenden) bieten alle Hinweise in Bezug auf die (inoffiziell dokumentiert) native API-Aufrufe conhost.exe verwendet?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X