批处理文件中的字符串比较

时间:2013-02-19 09:39:39

标签: windows batch-file

我们如何比较在批处理文件中获得空格和特殊字符的字符串?

我在尝试:

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
)

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

有什么想法吗?

3 个答案:

答案 0 :(得分:72)

只需在环境变量周围加上引号(就像你所做的那样):
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

答案 1 :(得分:31)

虽然@ ajv-jsy的答案大部分时间都有效,但我和@MarioVilas有同样的问题。如果要比较的其中一个字符串包含双引号(“),则变量扩展会引发错误。

示例:

@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

到目前为止,我还没有能够使用这种技术打破它。它适用于空字符串和我投入的所有符号。

<强>测试

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

答案 2 :(得分:-3)

解决方案是不要使用空间!

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