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?

ripper234
fonte

Respostas:

493

Experimentar

if NOT "asdf" == "fdas" echo asdf
Frank Bollack
fonte
105

Use NEQ em vez disso.

if "asdf" NEQ "fdas" echo asdf
demoncodemonkey
fonte
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.

jatrim
fonte
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).

Dominic Rodger
fonte
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?

Paulo
fonte