54 votes

Supprimer les guillemets des variables d'environnement nommées dans les scripts Windows

Je souhaite stocker un préfixe d'URL dans une variable d'environnement Windows. Les esperluettes dans la chaîne de requête rendent la chose difficile.

Par exemple : J'ai un préfixe d'URL de http://example.com?foo=1&bar= et que vous souhaitez créer une URL complète en fournissant une valeur pour l'attribut bar paramètre. Je souhaite ensuite lancer cette URL à l'aide de la commande "start".

Il est assez facile d'ajouter des guillemets autour de la valeur de l'opération SET :

set myvar="http://example.com?foo=1&bar="

Windows inclut les guillemets dans la valeur réelle (merci Windows !):

echo %myvar%
"http://example.com?foo=1&bar=true"

Je sais que je peux supprimer les guillemets des arguments des fichiers batch en utilisant le tilde :

echo %~1

Cependant, je n'arrive pas à le faire pour les variables nommées :

echo %~myvar%
%~myvar%

Quelle est la syntaxe pour y parvenir ?

39voto

Echo %myvar :"=%

32voto

zdan Points 11822

Il ne s'agit pas d'une limitation de la variable d'environnement, mais plutôt de l'interpréteur de commandes.

Mettez l'ensemble de la mission entre guillemets :

set "myvar=http://example.com?foo=1&bar="

Cependant, si vous essayez de faire un écho, il se plaindra car l'interpréteur de commandes verra qu'il y a une brèche à l'intérieur.

Vous pouvez y faire écho en mettant le nom de la variable entre guillemets :

echo "%myvar%"

Ou mieux encore, utilisez la commande set pour afficher le contenu :

set myvar

10voto

jimhark Points 2697

Bien qu'il y ait déjà plusieurs bonnes réponses, une autre façon de supprimer les guillemets est d'utiliser un simple sous-programme :

:unquote
  set %1=%~2
  goto :EOF

Voici un exemple complet d'utilisation :

@echo off
setlocal ENABLEDELAYEDEXPANSION ENABLEEXTENSIONS

set words="Two words"
call :unquote words %words%
echo %words%

set quoted="Now is the time"
call :unquote unquoted %quoted%
echo %unquoted%

set word=NoQuoteTest
call :unquote word %word%
echo %word%

goto :EOF

:unquote
  set %1=%~2
  goto :EOF

9voto

Chris Points 61

Cela fonctionne

for %a in (%myvar%) do set myvar=%~a

Je l'utiliserais également si je voulais imprimer une variable contenant une esperluette sans les guillemets.

for %a in ("fish & chips") do echo %~a

3voto

Keith Points 476

Pour supprimer uniquement les guillemets de début et de fin d'une variable :

SET myvar=###%myvar%###
SET myvar=%myvar:"###=%
SET myvar=%myvar:###"=%
SET myvar=%myvar:###=%

Cela suppose que vous n'avez pas de ###" ou de "###" à l'intérieur de votre valeur, et ne fonctionne pas si la variable est NULL.

Le mérite en revient à http://ss64.com/nt/syntax-esc.html pour cette méthode.

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