Batch not-equal (inequality) operator

前端 未结 5 704
爱一瞬间的悲伤
爱一瞬间的悲伤 2020-12-22 21:25

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

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


        
相关标签:
5条回答
  • 2020-12-22 21:57

    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.

    0 讨论(0)
  • 2020-12-22 21:59

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

    0 讨论(0)
  • 2020-12-22 22:03

    Try

    if NOT "asdf" == "fdas" echo asdf
    
    0 讨论(0)
  • 2020-12-22 22:04

    Use NEQ instead.

    if "asdf" NEQ "fdas" echo asdf
    
    0 讨论(0)
  • 2020-12-22 22:08

    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?

    0 讨论(0)
提交回复
热议问题