Comment puis-je échapper aux esperluettes dans un fichier de commandes (ou à partir de la ligne de commande Windows) afin d'utiliser la start
commande pour ouvrir des pages Web avec des esperluettes dans l'URL?
Les guillemets doubles ne fonctionneront pas avec start
; cela démarre une nouvelle fenêtre de ligne de commande à la place.
Mise à jour 1 : la solution de Wael Dalloul fonctionne. De plus, s'il y a des caractères encodés URL (par exemple, l'espace est encodé en% 20) dans l'URL et qu'elle se trouve dans un fichier batch, alors «%» doit être encodé en «%%». Ce n'est pas le cas dans l'exemple.
Exemple, à partir de la ligne de commande ( CMD.EXE
):
start http://www.google.com/search?client=opera&rls=en&q=escape+ampersand&sourceid=opera&ie=utf-8&oe=utf-8
aura pour résultat
http://www.google.com/search?client=opera
étant ouvert dans le navigateur par défaut et ces erreurs dans la fenêtre de ligne de commande:
'rls' is not recognized as an internal or external command,
operable program or batch file.
'q' is not recognized as an internal or external command,
operable program or batch file.
'sourceid' is not recognized as an internal or external command,
operable program or batch file.
'ie' is not recognized as an internal or external command,
operable program or batch file.
'oe' is not recognized as an internal or external command,
operable program or batch file.
Plate-forme: Windows XP 64 bits SP2.
la source
start
laquelle la citation de l'argument échoue si elle est appliquée sans réfléchir. Et dans l'ensemble, je pense que mettre l'argument entre guillemets est plus facile et moins sujet aux erreurs que d'échapper à chaque caractère qui doit s'échapper.+
que dois-je mettre devant pour y échapper?start "http://www.google.com/search?client=opera&rls=en&q=escape+ampersand&sourceid=opera&ie=utf-8&oe=utf-8"
fonctionne parce que PowerShell supprimera les citationsRéponses:
À partir d'un cmd :
&
est échappé comme ceci:^&
(basé sur la réponse de @Wael Dalloul )%
n'a pas besoin d'être échappéUn exemple:
À partir d'un fichier batch
&
est échappé comme ceci:^&
(basé sur la réponse de @Wael Dalloul )%
est échappé comme ceci:%%
(basé sur la mise à jour des OP)Un exemple:
la source
%
n'a pas besoin d'être échappé, car qui serait assez stupide pour définir20and
comme une variable d'environnement? Si vous l'avez fait, vousstart http://www.google.com/search?q=ampersand%20and%20percentage
pourriez créer un lien vershttp://www.google.com/search?q=ampersandsomething-silly20percentage
. En utilisant^%
pour échapper dans cmd, l'exemple fonctionne comme prévu.&
est utilisé pour séparer les commandes. Par conséquent, vous pouvez utiliser^
pour échapper au fichier&
.la source
+
que dois-je mettre devant pour y échapper?^
serait inestimable.Vous pouvez le mettre entre guillemets, si vous fournissez un premier argument factice.
Notez que vous devez fournir un premier argument factice dans ce cas, car
start
le premier argument sera traité comme un titre pour les nouvelles fenêtres de console, s'il est cité. Donc, ce qui suit devrait fonctionner (et fonctionne ici):la source
start "http://www.google.com/search?client=opera&rls=en&q=escape+ampersand&sourceid=opera&ie=utf-8&oe=utf-8"
sur PowerShellla source
La commande
fonctionne comme prévu, sortie
La commande
fonctionne également, en écrivant la chaîne dans le fichier "tmp". Cependant, avant un tuyau
le ^ est interprété complètement différemment. Il essaie d'écrire la sortie des deux commandes "echo this" et "that" dans le tube. L'écho fonctionnera alors "ça" donnera une erreur. En disant
mettra les chaînes «ceci» et «cela» dans le presse-papiers.
Sans le ^:
le premier écho écrira dans la console et seule la sortie du second écho sera redirigée vers le clip (de même pour la redirection "> tmp"). Ainsi, lorsque la sortie est redirigée, le ^ ne cite pas le & mais le fait appliquer avant la redirection plutôt qu'après.
Pour canaliser un &, vous devez le citer deux fois
Si vous mettez la chaîne dans une variable
puis
sortira
mais l'évidence
échoue car, une fois que Windows remplace la variable, il en résulte
il analyse ceci comme une nouvelle commande et essaie d'exécuter «cela».
Dans un fichier batch, vous pouvez utiliser l' expansion différée :
Pour sortir vers un tube, nous devons remplacer tous les & s dans la valeur de la variable par ^ &, ce que nous pouvons faire avec la syntaxe% VAR: FROM = TO%:
Sur la ligne de commande, "cmd / v" active l'expansion différée:
Cela fonctionne même lorsque vous écrivez dans un tuyau
Facile.
la source
echo this ^^^& that | clip
fonctionne aussi. Pour comprendre la gestion du tuyau magique, vous pouvez lire SO: Pourquoi l'expansion retardée échoue-t-elle à l'intérieur d'un bloc de code canalisé?Si vous avez besoin d'
echo
une chaîne contenant une esperluette, les guillemets n'aideront pas, car vous les verriez également sur la sortie. Dans un tel cas, utilisezfor
:... dans un script batch:
ou
la source
Si vous avez des espaces dans le nom du fichier et vous avez un caractère dont vous avez besoin pour échapper:
Vous pouvez utiliser des guillemets simples ET doubles pour éviter toute erreur de nom dans la commande.
Le
^
caractère échappe aux citations autrement.la source