102 votes

comparaison de chaînes de caractères dans un fichier batch

Comment comparer les chaînes de caractères qui ont des espaces et des caractères spéciaux dans un fichier batch ?

J'essaie :

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

Mais il 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 il donne une erreur "La syntaxe de la commande est incorrecte."

Des idées ?

119voto

AjV Jsy Points 1551

Il suffit de mettre des guillemets autour de la variable d'environnement (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 tu as mis la parenthèse ouvrante sans espace qui est déroutante.

Ça marche pour moi...

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

44voto

skataben Points 491

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.

-6voto

La solution est de NE PAS UTILISER LES ESPACES !

IF "%DevEnvDir%"=="C:\" (

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X