Bien que la réponse de @ajv-jsy fonctionne la plupart du temps, j'ai eu le même problème que @MarioVilas. Si l'une des chaînes à comparer contient un guillemet double ("), l'expansion de variable lance une erreur.
Exemple :
@echo off
SetLocal
set Lhs="
set Rhs="
if "%Lhs%" == "%Rhs%" echo Equal
Erreur :
echo was unexpected at this time.
Solution :
Activez l'expansion retardée et utilisez ! au lieu de %.
@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
Je n'ai pas réussi à le casser jusqu'à présent en utilisant cette technique. Il fonctionne avec des chaînes vides et tous les symboles que je lui ai envoyés.
Test :
@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.