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?
Essayer
if NOT "asdf" == "fdas" echo asdf
Utilisez NEQ à la place.
if "asdf" NEQ "fdas" echo asdf
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.
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é).
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?