batch file中的string比较

我们如何比较在batch file中获得空间和特殊字符的string?

我在尝试:

if %DevEnvDir% == "C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\"( echo VS2010 ) 

但它给出了一个错误“文件在这个时候是意外的”。

我试过了:

 if "%DevEnvDir%" == "C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\"( echo VS2010 ) 

但是它给出错误“命令的语法不正确”。

有任何想法吗?

只要在环境variables周围加引号就可以了(正如你所做的那样):
if "%DevEnvDir%" == "C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\"
但是,这是你把开放括号没有一个空间混淆它的方式。

为我工作…

 C:\if "%gtk_basepath%" == "C:\Program Files\GtkSharp\2.12\" (echo yes) yes 

虽然@ ajv-jsy的答案在大多数情况下都有效,但是我也遇到了@MarioVilas的问题。 如果其中一个要比较的string包含双引号(“),则variables扩展会引发错误。

例:

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

错误:

 echo was unexpected at this time. 

解:

启用延迟扩展和使用! 代替 %。

 @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 

使用这种技术到目前为止我还没有能够打破它。 它与空string和我扔在它的所有符号。

testing:

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

解决scheme是不要使用空间!

 IF "%DevEnvDir%"=="C:\" (