Je souhaite stocker un préfixe d'URL dans une variable d'environnement Windows. L'esperluette dans la chaîne de requête rend cependant cela gênant.
Par exemple: j'ai un préfixe d'URL de http://example.com?foo=1&bar=
et souhaitez créer une URL complète en fournissant une valeur pour le paramètre bar
. Je veux ensuite lancer cette URL en utilisant la commande "start".
L'ajout de 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 (merci Windows!):
echo %myvar%
"http://example.com?foo=1&bar=true"
Je sais que je peux supprimer les guillemets des arguments du fichier batch en utilisant tilde:
echo %~1
Cependant, je n'arrive pas à le faire pour les variables nommées:
echo %~myvar%
%~myvar%
Quelle est la syntaxe pour accomplir cela?
Il ne s'agit pas d'une limitation de la variable d'environnement, mais plutôt de la commande Shell.
Joignez l'intégralité du devoir entre guillemets:
set "myvar=http://example.com?foo=1&bar="
Bien que si vous essayez de faire écho à cela, cela se plaindra car le Shell verra une pause là-dedans.
Vous pouvez l'écho en mettant le nom var entre guillemets:
echo "%myvar%"
Ou mieux, utilisez simplement la commande set pour afficher le contenu:
set myvar
echo% myvar: "=%
Cela marche
for %a in (%myvar%) do set myvar=%~a
J'utiliserais également ceci si je voulais imprimer une variable qui contenait et esperluette sans les guillemets.
for %a in ("fish & chips") do echo %~a
Bien qu'il existe déjà plusieurs bonnes réponses, une autre façon de supprimer les guillemets consiste à utiliser un sous-programme simple:
: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'expansion des variables d'environnement différées et utilisez! Var: ~ 1, -1! pour 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" ### à l'intérieur de votre valeur, et ne fonctionne pas si la variable est NULL.
Le crédit revient à 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!
En effet, la variable contient des caractères Shell spéciaux.