Хоча відповідь @ 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.
if [%DevEnvDir%] == ["C:\..."]
. Посилання: stackoverflow.com/a/4953226/2428861