Сравнение строк в пакетном файле
Как сравнить строки, которые получили пространство и специальные символы в пакетном файле?
Я пытаюсь:
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
)
Но это дает ошибку "Синтаксис команды неверен".
Любые идеи?
Ответы
Ответ 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:\" (