string comparison in batch file

前端 未结 3 1305
温柔的废话
温柔的废话 2020-12-24 10:03

How do we compare strings which got space and special chars in batch file?

I am trying:

if %DevEnvDir% == \"C:\\Program Files (x86)\\Microsoft Visual         


        
3条回答
  •  星月不相逢
    2020-12-24 11:06

    While @ajv-jsy's answer works most of the time, I had the same problem as @MarioVilas. If one of the strings to be compared contains a double quote ("), the variable expansion throws an error.

    Example:

    @echo off
    SetLocal
    
    set Lhs="
    set Rhs="
    
    if "%Lhs%" == "%Rhs%" echo Equal
    

    Error:

    echo was unexpected at this time.
    

    Solution:

    Enable delayed expansion and use ! instead of %.

    @echo off
    SetLocal EnableDelayedExpansion
    
    set Lhs="
    set Rhs="
    
    if !Lhs! == !Rhs! echo Equal
    
    :: Surrounding with double quotes also works but appears (is?) unnecessary.
    if "!Lhs!" == "!Rhs!" echo Equal
    

    I have not been able to break it so far using this technique. It works with empty strings and all the symbols I threw at it.

    Test:

    @echo off
    SetLocal EnableDelayedExpansion
    
    :: Test empty string
    set Lhs=
    set Rhs=
    echo Lhs: !Lhs! & echo Rhs: !Rhs!
    if !Lhs! == !Rhs! (echo Equal) else (echo Not Equal)
    echo.
    
    :: Test symbols
    set Lhs= \ / : * ? " ' < > | %% ^^ ` ~ @ # $ [ ] & ( ) + - _ =
    set Rhs= \ / : * ? " ' < > | %% ^^ ` ~ @ # $ [ ] & ( ) + - _ =
    echo Lhs: !Lhs! & echo Rhs: !Rhs!
    if !Lhs! == !Rhs! (echo Equal) else (echo Not Equal)
    echo.
    

提交回复
热议问题