Подтвердить что ты не робот

Сравнение строк в пакетном файле

Как сравнить строки, которые получили пространство и специальные символы в пакетном файле?

Я пытаюсь:

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
)

Но это дает ошибку "Синтаксис команды неверен".

Любые идеи?

4b9b3361

Ответ 1

Просто поместите кавычки вокруг переменной среды (как вы это сделали):
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

Ответ 2

В то время как ответ @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.

Ответ 3

Решение - НЕ ИСПОЛЬЗУЙТЕ ПРОСТРАНСТВА!

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