windows - escapar - Escape ampersands en variables-ganar lote
escapar caracteres cmd (4)
Desafortunadamente, tendrá que hacer doble escape de los ampersands ya que se está evaluando dos veces o colocar el valor de la variable entre comillas.
set Name1=Red ^^^& Green
set Name2=%Name1% ^& Blue
Pero también necesitarás agregar otro conjunto de escapes para cuando se use Name2. Que llega a ser un gran dolor.
set Name1=Red ^^^^^& Green
set Name2=%Name1% ^^^& Blue
O utilizar citas (Recomendado)
set "Name1=Red ^& Green"
set "Name2=%Name1% ^& Blue"
Tengo una variable que contiene ampersands y necesito crear otra variable que contenga la primera. Sé que el carácter "&" se puede escapar con carret (^) pero no tengo idea de cómo escapar el texto dentro de una variable.
set Name1 = Red ^& Green
set Name2 = %Name1% ^& Blue
''Verde'' no se reconoce como un comando interno o externo, un programa operable o un archivo por lotes.
Ni siquiera puedo hacer "eco" de las variables que contienen ampersands; recibo el mismo error.
Necesito usar las variables para escribir su contenido en la salida o para manipular archivos nombrados por las variables como
type "%Name1%.txt"
type "%Name2%.txt"
La solución más sencilla es utilizar citas para la asignación y la expansión retrasada. Esto elimina cualquier necesidad de escapar.
@echo off
setlocal enableDelayedExpansion
set "Name1=Red & Green"
set "Name2=!Name1! & Blue"
echo !Name2!
Si tiene una mezcla de texto citado y no citado, a veces debe escapar algunos caracteres. Pero eso solo es necesario para la asignación inicial. El contenido de una variable nunca debe escaparse cuando se utiliza la expansión diferida.
@echo off
setlocal enableDelayedExpansion
set var="This & that" ^& the other thing.
echo !var!
La solución más simple sería esta:
for /f "delims= usebackq" %a in (`echo "First & ? * Last"`) do echo # %~a
... en un script por lotes:
for /f "delims= usebackq" %%a in (`echo "First & ? * Last"`) do echo # %%~a
o
for /f "delims= usebackq" %%a in (`echo "%~1"`) do echo # %%~a
Se me ocurren dos soluciones, ninguna de las cuales es suficientemente general, pero ambas "funcionan":
- Siempre mantenga las cosas entre comillas y elimínelas cuando sea necesario, como se indicó en la solución anterior.
- Vuelva a citar los & ''s: set name2 =% name1: & = ^ &% ^ & Blue