Operador de lote não igual (desigualdade)


264

De acordo com isso , !==!é o operador de string diferente. Tentando, eu recebo:

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

O que estou fazendo de errado?

Respostas:



105

Use NEQ em vez disso.

if "asdf" NEQ "fdas" echo asdf

37
isso requer que as extensões de comando sejam ativadas (elas estão por padrão em 2000+, mas podem ser desativadas em todo o sistema ou como um parâmetro para cmd.exe). Normalmente, você deve ativá-las com setlocal, mas para um teste simples, se não for igual, é só usar "se não", ele vai voltar para os bons velhos tempos do dOS
Anders

29

Sei que isso está desatualizado, mas isso ainda pode ser útil para quem chega atrasado à festa. (EDIT: atualizado, pois isso ainda recebe tráfego e @Goozak apontou nos comentários que minha análise original da amostra também estava incorreta.)

Eu peguei isso do código de exemplo no seu link:

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==!é simplesmente um uso idiomático do ==pretendido para verificar se a coisa à esquerda, que contém sua variável, é diferente da coisa à direita, que não. A !neste caso é apenas um espaço reservado personagem. Poderia ser qualquer coisa. Se %1tem conteúdo, então a igualdade será falso, se não você só vai ser comparando !a !e vai ser verdade.

!==!não é um operador, portanto, escrever "asdf" !==! "fdas"é bastante absurdo.

A sugestão de usar if not "asdf" == "fdas"é definitivamente o caminho a percorrer.


Obrigado jatrim .. Definitivamente, útil para quem procura uma resposta, em vez de fazer a pergunta novamente. Não é como o StackExchange bloqueia a capacidade de responder / comentar devido à idade das perguntas; portanto, pense que isso é totalmente aceitável.
user66001

4
Eles !são usados ​​aqui, caso %1estejam vazios, resultando no teste !==!, o que é verdadeiro. Em %1.==.vez disso, você poderia usar (quase qualquer personagem faria) - o objetivo é garantir que os dois lados do teste de igualdade tenham algo a ser testado. A !==!notação definitivamente não é um sinal de não-igualdade. Melhor ficar com if not ....
Goozak 6/09/09

22

Experimentar:

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

Isso funciona para mim no Windows XP (eu recebo o mesmo erro que você no código postado).


4

O NEQ é geralmente usado para números e == geralmente é usado para comparação de cadeias.

Não consigo encontrar nenhuma documentação que mencione um operando de desigualdade específico e equivalente para comparação de strings (no lugar de NEQ). A solução usando IF NOT == parece a abordagem mais sólida. Não consigo pensar imediatamente em uma circunstância na qual a avaliação das operações em um arquivo em lotes causaria um problema ou comportamento inesperado ao aplicar o método de comparação IF NOT == às seqüências de caracteres.

Eu gostaria de poder oferecer informações sobre como as duas funções se comportam de maneira diferente em um nível inferior - desmontar arquivos em lotes separados (que usam NEQ e IF NOT ==) ofereceria alguma dica em termos das quais a API nativa (documentada oficialmente) chama o conhecidoost.exe está utilizando?

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.