y a-t-il un échappement pour le caractère '&' dans l'invite de commande?

11

J'essaie quelque chose comme:

set pwd = abc&123
echo password %pwd%

J'obtiens le résultat comme ...

'123' is not recognized as an internal or external command, operable program or batch file. 
password abc

Le système est-il comme ça ou y a-t-il une échappatoire pour de tels personnages?

déostroll
la source
1
La même question dans SO Comment échapper aux esperluettes dans les fichiers batch?
Michael Freidgeim

Réponses:

9

Ce que vous devez faire est de mettre votre mot de passe entre guillemets comme ceci:

set pwd="abc&123"
echo %pwd%

Dites-moi comment ça se passe.

Carlos
la source
1
Une autre option qui peut être préférable dans certains scénarios estset "pwd=abc&123"
Harry Johnston
1
-1 il est choquant que cela ait eu 5 votes positifs, c'est faux. Windows utilise% var% ou! Var! vous auriez pu le tester vous-même si facilement. $ var est dans linux, si vous faites écho à $ var dans windows, il dit simplement $ var
barlop
1
@barlop: vu que c'est l' autre ligne qui répond à la question, je ne vois pas que ça compte.
Harry Johnston
7

J'ai trouvé que cela fonctionne mieux avec une combinaison de la réponse de Martineau et de la réponse de Mastashake57.

set pwd=abc^&123
echo %pwd%

Échoue toujours, et

set pwd="abc&123"
echo %pwd%

Ajoute des guillemets (vous ne pouvez pas supprimer les guillemets avec une formanipulation de boucle ou de chaîne, car cela échouera à nouveau, grâce à l'esperluette), ce qui n'est pas terrible.

cependant,

set "pwd=abc^&123"
echo %pwd%

Marche parfaitement.

J'espère que cela pourra aider.

BDM
la source
+1. Sachez que cela laisse le carat dans la variable d'environnement, c'est-à-dire qu'il est défini pwdsur abc^&123. La plupart du temps, c'est probablement exactement ce que vous devez faire, mais cela pourrait vous surprendre si vous n'êtes pas au courant de ce qui se passe.
Harry Johnston
@HarryJohnston Je dois corriger votre faute d'orthographe. C'est soigné. btw je sais que ntcmds.chm le mentionne, mais où en cmd /? la documentation mentionne-t-elle que le curseur est le personnage d'échappement?
barlop
@Barlop: il en est ainsi; Je le confondais avec l'homonyme. En règle générale, /?ne fournit qu'un résumé, pas une documentation complète.
Harry Johnston
@barlop,? Le signe d'insertion est le personnage d'évasion.
Pacerier
@Pacerier oui, caret est le personnage d'échappement, personne n'est en désaccord avec cela. et il est mentionné qu'il s'agit du caractère d'échappement, dans ntcmds.chm (ntcmds.chm est venu avec XP et se trouve dans un équivalent en ligne microsoft.com/resources/documentation/windows/xp/all/proddocs/… et peut-être à certains égards plus à jour en ligne - peut-être plus de commandes). Je demandais juste où dans /? (si n'importe où), il dit que caret est le personnage d'évasion
barlop
7

À partir du fichier d'aide de référence de ligne de commande:

L'esperluette (&), le tuyau (|) et les parenthèses () sont des caractères spéciaux qui doivent être précédés du caractère d'échappement (^) ou des guillemets lorsque vous les passez comme arguments.

Il semble que mettre le mot de passe entier entre guillemets serait plus facile que d'échapper à des caractères individuels s'il y a plus de deux caractères à l'intérieur qui ont besoin du traitement.

martineau
la source
Et des citations entre guillemets?
Pacerier
4

Ce dont vous avez vraiment besoin, c'est:

set pwd=abc^^^&123
echo %pwd%

Ou:

set "pwd=abc^&123"
echo %pwd%

Explication:

Étant donné qu'il &s'agit d'un caractère spécial, vous devez lui échapper, ce qui ^entraîne ^&.

L'exécution set pwd=abc^&123définira la variable sur la valeur abc&123. Après cela, si vous deviez courir echo %pwd%, vous courez effectivement echo abc&123.

Pourtant, echo abc&123ne fonctionne pas comme prévu, car il &s'agit d'un caractère spécial. Vous pouvez éviter cela en ajoutant des guillemets: echo "abc&123"mais votre sortie aurait aussi les caractères de guillemet. En d'autres termes, l'utilisation de guillemets n'est pas exactement une bonne solution.

Ce dont vous avez besoin est d'échapper au caractère &lorsque vous exécutez la echocommande:

echo abc^&123

La variable doit donc contenir la valeur abc^&123. Pour définir la variable sur la valeur abc^&123, vous devez échapper les caractères spéciaux ^et &, résultant en:

set pwd=abc^^^&123
Pacerier
la source
+1 pour avoir souligné la nécessité d'échapper au
signe d'insertion
Fonctionne très bien, merci. Ce caractère d'échappement n'est pas mentionné dans le doc pour une raison quelconque docs.microsoft.com/en-us/windows-server/administration/…
Sergey Smolnikov