Question

Je souhaite stocker un préfixe d'URL dans une variable d'environnement Windows. Les esperluettes dans la chaîne de requête compliquent cette tâche.

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

Ajouter des guillemets autour de la valeur de l'opération SET est assez simple:

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

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

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

Je sais que je peux enlever les guillemets des arguments de fichier de commandes en utilisant le tilde:

echo %~1

Cependant, je n'arrive pas à le faire avec des variables nommées:

echo %~myvar%
%~myvar%

Quelle est la syntaxe pour accomplir cela?

Était-ce utile?

La solution

Ceci n'est pas une limitation de la variable d'environnement, mais plutôt du shell de commande.

Mettez l'intégralité de l'affectation entre guillemets:

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

Bien que si vous essayez de faire écho à cela, il va se plaindre car le shell va voir une pause là-bas.

Vous pouvez y accéder en mettant le nom de la variable entre guillemets:

echo "%myvar%"

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

set myvar

Autres conseils

echo% myvar: " =%

Cela fonctionne

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

Je l’utiliserais aussi si je voulais imprimer une variable qui contenait et une esperluette sans les guillemets.

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

Bien qu'il existe déjà plusieurs bonnes réponses, un autre moyen de supprimer les guillemets consiste à utiliser un simple sous-programme:

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

Voici un exemple d'utilisation complet:

@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

Utilisez l’extension de la variable d’environnement différée et utilisez! var: ~ 1, -1! supprimer les guillemets:

@echo off
setlocal enabledelayedexpansion
set myvar="http://example.com?foo=1&bar="
set myvarWithoutQuotes=!myvar:~1,-1!
echo !myvarWithoutQuotes!

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 "### dans votre valeur, et ne fonctionne pas si la variable est NULL.

Le crédit va à http://ss64.com/nt/syntax-esc.html pour cette méthode.

Utilisez plusieurs variables pour le faire:

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

set bar=true

set launch=%testvar:,-1%%bar%"

start iexplore %launch%
@echo off
set "myvar=http://example.com?foo=1&bar="
setlocal EnableDelayedExpansion
echo !myvar!

Cela est dû au fait que la variable contient des caractères de shell spéciaux.

Je pense que cela devrait le faire:

for /f "tokens=*" %i in (%myvar%) do set %myvar%=%~i

Mais vous n'en avez pas besoin,

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

Cela fonctionnera aussi, il vous suffit de fournir un titre à la commande de démarrage.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top