Comment puis-je échapper des esperluettes dans un fichier de commandes (ou à partir de la ligne de commande Windows) afin d'utiliser la commande start
pour ouvrir Des pages Web avec des esperluettes dans l'URL?
Les guillemets doubles ne fonctionneront pas avec start
; Cela ouvre une nouvelle fenêtre de ligne de commande
Update 1 : La solution de Wael Dalloul fonctionne. De plus, si Il existe des caractères encodés en URL (par exemple, l'espace est codé en tant que % 20) dans l'URL et dans un fichier de traitement par lots, alors '%' doit être Codé en tant que ' %% '. 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
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.
D'un cmd:
&
est échappé comme ceci: ^&
(basé sur le réponse de @Wael Dalloul%
n'a pas besoin d'être échappéUn exemple:
start http://www.google.com/search?client=opera^&rls=en^&q=escape+ampersand%20and%20percentage+in+cmd^&sourceid=opera^&ie=utf-8^&oe=utf-8
À partir d'un fichier batch
&
est échappé comme ceci: ^&
(basé sur le réponse de @Wael Dalloul%
est échappé comme ceci: %%
(basé sur la mise à jour des OP)Un exemple:
start http://www.google.com/search?client=opera^&rls=en^&q=escape+ampersand%%20and%%20percentage+in+batch+file^&sourceid=opera^&ie=utf-8^&oe=utf-8
&
est utilisé pour séparer les commandes. Par conséquent, vous pouvez utiliser ^
pour échapper à &
.
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
traitera le premier argument comme un titre pour les nouvelles fenêtres de la console, s'il est cité. Donc, ce qui suit devrait fonctionner (et fonctionne ici):
start "" "http://www.google.com/search?client=opera&rls=en&q=escape+ampersand&sourceid=opera&ie=utf-8&oe=utf-8"
Explorer "http://www.google.com/search?client=opera&rls=...."
La commande
echo this ^& that
fonctionne comme prévu, sortie
this & that
La commande
echo this ^& that > tmp
fonctionne également, en écrivant la chaîne dans le fichier "tmp". Cependant, avant une pipe
echo this ^& that | clip
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 "cela" donnera une erreur. En disant
echo this ^& echo that | clip
mettra les chaînes "ceci" et "cela" dans le presse-papiers.
Sans le ^:
echo this & echo that | clip
le premier écho va écrire sur la console et seule la sortie du deuxième écho sera transmise au clip (de la même manière pour la redirection "> tmp"). Ainsi, lorsque la sortie est redirigée, le ^ ne cite pas le & mais le fait plutôt appliquer avant le redirection plutôt qu'après.
Pour diriger un &, vous devez le citer deux fois
echo this ^^^& that | clip
Si vous mettez la chaîne dans une variable
set m=this ^& that
puis
set m
va sortir
m=this & that
mais l'évident
echo %m%
échoue car, après que Windows ait substitué la variable, il en résulte
echo this & that
il analyse cela comme une nouvelle commande et essaie d'exécuter "ça".
Dans un fichier de commandes, vous pouvez utiliser expansion retardée :
setlocal enableDelayedExpansion
echo !m!
Pour sortir dans un tube, nous devons remplacer tout & s dans la valeur de la variable par ^ &, ce que nous pouvons faire avec la syntaxe% VAR: FROM = TO%:
echo !m:^&=^^^&! | clip
Sur la ligne de commande, "cmd/v" permet une expansion différée:
cmd /v /c echo !m!
Cela fonctionne même lorsque vous écrivez sur un tuyau
cmd /v /c echo !m! | clip
Simple.
Si vous avez besoin de echo
, une chaîne contenant une esquisse, ne sera d'aucun secours, car vous les verrez également dans le résultat. Dans ce cas, utilisez for
:
for %a in ("First & Last") do echo %~a
... dans un script batch:
for %%a in ("First & Last") do echo %%~a
ou
for %%a in ("%~1") do echo %%~a
Ajouter ceci pour les futurs utilisateurs -
SI vous avez des espaces dans le nom du fichier ET que vous avez un caractère que vous devez échapper: vous pouvez utiliser des guillemets simples ET ET pour éviter les erreurs de nom dans la commande.
scp ./'files name with spaces/internal folder with spaces/"text & files stored.txt"' .
Le caractère ^
échappe aux guillemets
édité pour inclure le .
de fermeture à la fin de la commande