web-dev-qa-db-fra.com

comparaison de chaînes dans un fichier batch

Comment comparons-nous les chaînes contenant de l'espace et des caractères spéciaux dans un fichier de commandes?

J'essaie:

if %DevEnvDir% == "C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\"(
echo VS2010
)

Mais cela donne une erreur "Les fichiers étaient inattendus à ce moment-là".

J'ai essayé:

if "%DevEnvDir%" == "C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\"(
echo VS2010
)

Mais cela donne une erreur "La syntaxe de la commande est incorrecte."

Des idées?

60
dushyantp

Il suffit de mettre des guillemets autour de la variable Environment (comme vous l'avez fait):
if "%DevEnvDir%" == "C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\"
Mais c’est la façon dont vous mettez le crochet d’ouverture sans laisser d’espace qui le confond.

Travaille pour moi...

C:\if "%gtk_basepath%" == "C:\Program Files\GtkSharp\2.12\" (echo yes)
yes
74
AjV Jsy

Bien que la réponse de @ ajv-jsy fonctionne la plupart du temps, j'ai le même problème que @MarioVilas. Si l'une des chaînes à comparer contient un guillemet double ("), le développement de la variable génère une erreur.

Exemple:

@echo off
SetLocal

set Lhs="
set Rhs="

if "%Lhs%" == "%Rhs%" echo Equal

Erreur:

echo was unexpected at this time.

Solution:

Activer l'expansion et l'utilisation retardée! 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 été capable de le casser jusqu'à présent en utilisant cette technique. Cela fonctionne avec des chaînes vides et tous les symboles que j'ai jeté dessus.

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.
35
skataben