Während die Antwort von @ ajv-jsy die meiste Zeit funktioniert, hatte ich das gleiche Problem wie @MarioVilas. Wenn eine der zu vergleichenden Zeichenfolgen ein doppeltes Anführungszeichen (") enthält, gibt die Variablenerweiterung einen Fehler aus.
Beispiel:
@echo off
SetLocal
set Lhs="
set Rhs="
if "%Lhs%" == "%Rhs%" echo Equal
Error:
echo was unexpected at this time.
Lösung:
Aktivieren Sie die verzögerte Erweiterung und Verwendung! Anstatt von %.
@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
Ich konnte es bisher mit dieser Technik nicht brechen. Es funktioniert mit leeren Zeichenfolgen und allen Symbolen, die ich darauf geworfen habe.
Prüfung:
@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:\..."]
. Link: stackoverflow.com/a/4953226/2428861