181 votes

Comment échapper aux esperluettes dans les fichiers batch ?

Comment puis-je échapper aux esperluettes dans un fichier batch (ou à partir de la ligne de commande de Windows) afin d'utiliser la fonction d'échappement de l'ordinateur ? ligne de commande Windows) afin d'utiliser la fonction start pour pour ouvrir les pages web dont l'URL contient des esperluettes ?

Les guillemets ne fonctionnent 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. En outre, si il y a des caractères codés dans l'URL (par exemple, l'espace est codé en tant que %20) dans l'URL et il est dans un fichier batch alors '%' doit être ê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 la 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 bit SP2.

1 votes

J'ai modifié la réponse de belugabob pour qu'elle fonctionne maintenant. C'est juste une bizarrerie dans start qui fait que la citation de l'argument échoue si elle est appliquée sans réflexion. Et dans l'ensemble, je pense qu'il est plus facile et moins risqué de mettre l'argument entre guillemets que d'échapper chaque caractère qui doit l'être.

1 votes

Et le signe plus ? + que dois-je mettre devant pour l'échapper ?

0 votes

Dans PowerShell start "http://www.google.com/search?client=opera&rls=en&q=escape+a‌​mpersand&sourceid=op‌​era&ie=utf-8&oe=utf-‌​8" fonctionne car PowerShell supprimera les guillemets

1voto

Jaroslav Záruba Points 1059

Si vous devez echo une chaîne contenant une esperluette, les guillemets ne seront d'aucune utilité, car ils apparaîtront également sur la sortie. Dans un tel cas, utilisez for :

for %a in ("First & Last") do echo %~a

...dans un lot script :

for %%a in ("First & Last") do echo %%~a

ou

for %%a in ("%~1") do echo %%~a

0voto

be-ns Points 45

Si vous avez des espaces dans le nom du fichier et vous avez un personnage à qui vous devez échapper :

Vous pouvez utiliser des guillemets simples ET doubles pour éviter toute confusion dans la commande.

scp ./'files name with spaces/internal folder with spaces/"text & files stored.txt"' .

Le site ^ le caractère échappe aux guillemets sinon.

0voto

Stan Points 55

Pour les caractères spéciaux comme '&', vous pouvez entourer l'expression entière de guillemets.

set "url=https://url?retry=true&w=majority"

0 votes

Ce n'est pas mon downvote, mais cela semble faire double emploi avec des réponses plus anciennes, toutes deux avec plus de détails et d'explications.

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