string comparison in batch file

前端 未结 3 1301
温柔的废话
温柔的废话 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 10:47

    The solution is DO NOT USE SPACES!

    IF "%DevEnvDir%"=="C:\" (
    
    0 讨论(0)
  • 2020-12-24 10:58

    Just put quotes around the Environment variable (as you have done) :
    if "%DevEnvDir%" == "C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\"
    but it's the way you put opening bracket without a space that is confusing it.

    Works for me...

    C:\if "%gtk_basepath%" == "C:\Program Files\GtkSharp\2.12\" (echo yes)
    yes
    
    0 讨论(0)
  • 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.
    
    0 讨论(0)
提交回复
热议问题