Selon cela , !==!
est l'opérateur de chaîne non égal. En l'essayant, j'obtiens:
C:\> if "asdf" !==! "fdas" echo asdf
!==! was unexpected at this time.
Qu'est-ce que je fais mal?
batch-file
operators
ripper234
la source
la source
Je sais que c'est assez dépassé, 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 souligné 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:
!%1==!
est simplement une utilisation idiomatique de==
destinée à vérifier que la chose de gauche, qui contient votre variable, est différente de la chose de droite, ce n'est pas le cas. Dans!
ce cas, il s'agit simplement d'un espace réservé de caractère. Ça pourrait être n'importe quoi. Si%1
a du contenu, alors l'égalité sera fausse, si ce n'est pas le cas, vous serez simplement comparé!
à!
et ce sera vrai.!==!
n'est pas un opérateur, donc écrire"asdf" !==! "fdas"
n'a pas de sens.La suggestion d'utiliser
if not "asdf" == "fdas"
est certainement la voie à suivre.la source
!
sont utilisés ici au cas où il%1
est vide, ce qui entraîne le test!==!
, ce qui est vrai. Vous pouvez utiliser à la%1.==.
place (presque n'importe quel caractère le ferait) - le but étant de vous assurer que les deux côtés du test d'égalité ont quelque chose à tester. La!==!
notation n'est certainement PAS un signe différent. Mieux vaut rester avecif not ...
.Essayer:
Cela fonctionne pour moi sur Windows XP (j'obtiens la même erreur que vous pour le code que vous avez publié).
la source
NEQ est généralement utilisé pour les nombres et == est généralement utilisé 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 solide. Je ne peux pas immédiatement penser à une circonstance dans laquelle l'évaluation des opérations dans un fichier de commandes entraînerait un problème ou un comportement inattendu lors de l'application de la méthode de comparaison IF NOT == aux chaînes.
J'aimerais pouvoir donner un aperçu de la façon dont les deux fonctions se comportent différemment à un niveau inférieur - le démontage de fichiers de commandes séparés (qui utilisent NEQ et IF NOT ==) offrirait des indices en termes d'appels d'API natifs (non officiellement documentés) conhost.exe utilise?
la source