escape escapar caracteres caracter batch bat windows batch-file escaping

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":

  1. Siempre mantenga las cosas entre comillas y elimínelas cuando sea necesario, como se indicó en la solución anterior.
  2. Vuelva a citar los & ''s: set name2 =% name1: & = ^ &% ^ & Blue