¿hay un escape para el carácter '&' en el símbolo del sistema?

Respuestas:

9

Lo que debe hacer es ajustar su contraseña entre comillas dobles de la siguiente manera:

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

Déjame saber como va.

Carlos
fuente
1
Otra opción que puede ser preferible en algunos escenarios esset "pwd=abc&123"
Harry Johnston
1
-1 es sorprendente que esto haya tenido 5 votos a favor, está mal. Windows usa% var% o! Var! podrías haberlo probado tú mismo tan fácilmente. $ var está en linux, si haces eco de $ var en windows solo dice literalmente $ var
barlop
1
@barlop: ya que es la otra línea la que aborda la pregunta, no veo que importe.
Harry Johnston
7

Descubrí que funciona mejor con una combinación de la respuesta de martineau y la respuesta de mastashake57.

set pwd=abc^&123
echo %pwd%

Todavía falla, y

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

Agrega comillas (no puede eliminar las comillas con un forbucle o manipulación de cadena porque fallará nuevamente, gracias al ampersand), lo que no es tan bueno.

Sin embargo,

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

Funciona perfectamente.

Espero que ayude.

BDM
fuente
+1. Tenga en cuenta que esto deja el quilate en la variable de entorno, es decir, se establece pwden abc^&123. La mayoría de las veces esto probablemente sea exactamente lo que necesita hacer, pero podría atraparlo si no está al tanto de lo que está sucediendo.
Harry Johnston
@HarryJohnston Debo corregir su error de ortografía. Es carEt. Por cierto, sé que ntcmds.chm lo menciona, pero ¿dónde en cmd /? ¿Se menciona en la documentación que el caret es el personaje de escape?
barlop
@Barlop: así es; Lo estaba confundiendo con el homónimo. Como regla general, /?solo se proporciona un resumen, no una documentación completa.
Harry Johnston
@barlop,? El caret es el personaje de escape.
Pacerier
@Pacerier sí, caret es el personaje de escape, nadie está en desacuerdo con eso. y se menciona que es el carácter de escape, en ntcmds.chm (ntcmds.chm vino con XP y está en un equivalente en línea microsoft.com/resources/documentation/windows/xp/all/proddocs/… y tal vez de alguna manera más actualizado en línea, tal vez más comandos). Solo preguntaba dónde en /? (en cualquier lugar), dice que caret es el personaje de escape
barlop
7

Desde el archivo de ayuda de referencia de línea de comandos:

El ampersand (&), la tubería (|) y los paréntesis () son caracteres especiales que deben ir precedidos del carácter de escape (^) o comillas cuando los pasa como argumentos.

Parece que poner la contraseña completa entre comillas sería más fácil que escapar de los caracteres individuales si hay más de dos caracteres que necesitan el tratamiento.

Martineau
fuente
¿Y citas entre comillas?
Pacerier
4

Lo que realmente necesitas es:

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

O:

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

Explicación:

Como &es un personaje especial, debes escapar con él ^, lo que resulta en ^&.

La ejecución set pwd=abc^&123establecerá la variable en el valor abc&123. Después de eso, si tuviera que correr echo %pwd%, está corriendo efectivamente echo abc&123.

Sin embargo echo abc&123, no funciona como esperabas, porque &es un personaje especial. Puede evitar esto agregando comillas: echo "abc&123"pero su salida también tendrá los caracteres de comillas. En otras palabras, usar comillas no es exactamente una solución adecuada.

Lo que necesita es escapar del &char cuando ejecuta el echocomando:

echo abc^&123

Entonces la variable necesita contener el valor abc^&123. Para establecer la variable en el valor abc^&123, deberá escapar de los caracteres especiales ^y &, como resultado:

set pwd=abc^^^&123
Pacerier
fuente
+1 por señalar la necesidad de escapar del caret
jmcg
Funciona muy bien, gracias. Este personaje de escape no se menciona en el documento en alguna razón docs.microsoft.com/en-us/windows-server/administration/…
Sergey Smolnikov