Respuestas:
Tratar
if NOT "asdf" == "fdas" echo asdf
Use NEQ en su lugar.
if "asdf" NEQ "fdas" echo asdf
Sé que esto está bastante desactualizado, pero aún podría ser útil para aquellos que llegan tarde a la fiesta. (EDITAR: actualizado ya que esto todavía recibe tráfico y @Goozak ha señalado en los comentarios que mi análisis original de la muestra también era incorrecto).
Saqué esto del código de ejemplo en su enlace:
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==!
es simplemente un uso idiomático de la ==
intención de verificar que la cosa de la izquierda, que contiene su variable, es diferente de la de la derecha, eso no. En !
este caso, es solo un marcador de posición de personaje. Podría ser cualquier cosa. Si %1
tiene contenido, entonces la igualdad será falsa, si no vas a estar comparando !
a !
y será verdad.
!==!
no es un operador, por lo que escribir "asdf" !==! "fdas"
es bastante absurdo.
La sugerencia de uso if not "asdf" == "fdas"
es definitivamente el camino a seguir.
!
usan aquí en caso de que %1
esté vacío, lo que resulta en la prueba !==!
, que es cierto. En su %1.==.
lugar, podría usar (casi cualquier personaje lo haría), con el propósito de asegurarse de que ambos lados de la prueba de igualdad tengan algo que probar. La !==!
notación definitivamente NO es un signo no igual. Mejor quédate con if not ...
.
Tratar:
if not "asdf" == "fdas" echo asdf
Eso funciona para mí en Windows XP (obtengo el mismo error que tú para el código que publicaste).
NEQ se usa generalmente para números y == se usa típicamente para comparación de cadenas.
No puedo encontrar ninguna documentación que mencione un operando de desigualdad específico y equivalente para la comparación de cadenas (en lugar de NEQ). La solución usando IF NOT == parece el enfoque más sólido. No puedo pensar de inmediato en una circunstancia en la que la evaluación de las operaciones en un archivo por lotes pueda causar un problema o un comportamiento inesperado al aplicar el método de comparación IF NOT == a las cadenas.
Desearía poder ofrecer una idea de cómo se comportan las dos funciones de manera diferente en un nivel inferior: si desarma los archivos por lotes separados (que usan NEQ e IF NOT ==) ofrecería alguna pista en términos de qué API nativas (no documentadas) llama a conhost.exe está utilizando?