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 %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.
!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 ....
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?