Respostas:
Experimentar
if NOT "asdf" == "fdas" echo asdf
Use NEQ em vez disso.
if "asdf" NEQ "fdas" echo asdf
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 %1
tem 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.
!
são usados aqui, caso %1
estejam 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 ...
.
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).
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?