Batch not-equal (inequality) operator

Batch FileOperators

Batch File Problem Overview


According to this, !==! is the not-equal string operator. Trying it, I get:

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

What am I doing wrong?

Batch File Solutions


Solution 1 - Batch File

Try

if NOT "asdf" == "fdas" echo asdf

Solution 2 - Batch File

Use NEQ instead.

if "asdf" NEQ "fdas" echo asdf

Solution 3 - Batch File

I know this is quite out of date, but this might still be useful for those coming late to the party. (EDIT: updated since this still gets traffic and @Goozak has pointed out in the comments that my original analysis of the sample was incorrect as well.)

I pulled this from the example code in your 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==! is simply an idiomatic use of == intended to verify that the thing on the left, that contains your variable, is different from the thing on the right, that does not. The ! in this case is just a character placeholder. It could be anything. If %1 has content, then the equality will be false, if it does not you'll just be comparing ! to ! and it will be true.

!==! is not an operator, so writing "asdf" !==! "fdas" is pretty nonsensical.

The suggestion to use if not "asdf" == "fdas" is definitely the way to go.

Solution 4 - Batch File

Try:

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

That works for me on Windows XP (I get the same error as you for the code you posted).

Solution 5 - Batch File

NEQ is usually used for numbers and == is typically used for string comparison.

I cannot find any documentation that mentions a specific and equivalent inequality operand for string comparison (in place of NEQ). The solution using IF NOT == seems the most sound approach. I can't immediately think of a circumstance in which the evaluation of operations in a batch file would cause an issue or unexpected behavior when applying the IF NOT == comparison method to strings.

I wish I could offer insight into how the two functions behave differently on a lower level - would disassembling separate batch files (that use NEQ and IF NOT ==) offer any clues in terms of which (unofficially documented) native API calls conhost.exe is utilizing?

Solution 6 - Batch File

The easiest way I found is to:

IF %ERRORLEVEL% NEQ 0 Echo An error was found

or

IF %ERRORLEVEL% GRT 0 goto error1

The operator !==! has not right value, which means that's used only to know whether a variable was set or not.

IF !%1==! GOTO main

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
Questionripper234View Question on Stackoverflow
Solution 1 - Batch FileFrank BollackView Answer on Stackoverflow
Solution 2 - Batch FiledemoncodemonkeyView Answer on Stackoverflow
Solution 3 - Batch FilejatrimView Answer on Stackoverflow
Solution 4 - Batch FileDominic RodgerView Answer on Stackoverflow
Solution 5 - Batch FilePaulView Answer on Stackoverflow
Solution 6 - Batch FilePaulo Henrique Lellis GonalvesView Answer on Stackoverflow