web-dev-qa-db-fra.com

Opérateur de lot non égal (inégalité)

D'après this , !==! est l'opérateur de chaîne non égal . En l'essayant, je reçois:

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

Qu'est-ce que je fais mal?

223
ripper234

Essayer

if NOT "asdf" == "fdas" echo asdf
431
Frank Bollack

Utilisez NEQ à la place.

if "asdf" NEQ "fdas" echo asdf
89
demoncodemonkey

Je sais que cela est tout à fait obsolète, mais cela pourrait quand même être utile pour ceux qui arrivent en retard à la fête. (EDIT: mis à jour car cela génère toujours du trafic et @Goozak a indiqué dans les commentaires que mon analyse initiale de l'échantillon était également incorrecte.)

J'ai tiré ceci de l'exemple de code dans votre lien: 

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==! est simplement une utilisation idiomatique de == dans le but de vérifier que la chose à gauche, qui contient votre variable, est différente de la chose à droite, ce qui n'est pas le cas. Le ! dans ce cas est juste un espace réservé de caractère. Cela pourrait être n'importe quoi. Si %1 a un contenu, alors l'égalité sera fausse, sinon, vous comparerez simplement ! à ! et ce sera vrai.

!==! n'est pas un opérateur, écrire "asdf" !==! "fdas" n'a donc aucun sens.

La suggestion d'utiliser if not "asdf" == "fdas" est définitivement la voie à suivre.

28
jatrim

Essayer:

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

Cela fonctionne pour moi sous Windows XP (je reçois la même erreur que vous pour le code que vous avez posté).

20
Dominic Rodger

NEQ est généralement utilisé pour les nombres et == pour la comparaison de chaînes.

Je ne trouve aucune documentation mentionnant un opérande d'inégalité spécifique et équivalent pour la comparaison de chaînes (à la place de NEQ). La solution utilisant IF NOT == semble l’approche la plus judicieuse. Je ne peux pas immédiatement penser à une situation dans laquelle l'évaluation des opérations dans un fichier de traitement causerait un problème ou un comportement inattendu lors de l'application de la méthode de comparaison IF NOT == à des chaînes.

J'aimerais pouvoir expliquer comment les deux fonctions se comportent différemment à un niveau inférieur - désassembler des fichiers de commandes distincts (utilisant NEQ et IF NOT ==) offrant des indices permettant de savoir quels appels d'API natifs (documentés officieusement) conhost.exe utilise?

0
Paul