Cómo establecer el valor de la variable dentro del bloque si el valor incluye paréntesis

-2

Estoy teniendo problemas para establecer el valor dentro de if block. Por favor considere el siguiente código:

\ mytool.bat

@echo off
if not "%adder%" == "" (
    set val=%val%;%adder%
) else (
    echo please set adder first
)
echo value="%val%"

Ahora cuando ejecuto lo siguiente a través de cmd:

set adder=a(bc)d
mytool

Me da error es decir

d was unexpected at this time.

Por otro lado, seguir funciona

set adder=abcd
mytool

con salida value=";abcd"
quiero el comportamiento similar incluso cuando addertengo paréntesis.
También probé esto . Pero solo persisten los cambios en la variable val dentro del lote.

afzalex
fuente
Hasta donde puedo ver, la respuesta aceptada en el enlace de David Postill en su pregunta anterior trata adecuadamente el problema. ¿Por qué no te funcionó?
AFH
¿Por qué no te deshaces de los paréntesis y los usas gotoen su lugar? No es exactamente ordenado, pero evita el problema.
AFH
@AFH Sí, goto podría hacerlo. pero tendría que cambiar tanto código en mi lote real para implementarlo. Y en realidad la respuesta de David lo resolvió.
afzalex

Respuestas:

3

¿Cómo configuro el valor de una variable dentro de un bloque if cuando el valor incluye paréntesis?

Si el valor de la variable contiene un paréntesis (o )necesita citar la setexpresión del lado derecho en el archivo por lotesset "val=%val%;%adder%"

prueba.cmd:

@echo off
if not "%adder%" == "" (
    set "val=%val%;%adder%"
) else (
    echo please set adder first
)
echo value=%val%

salida:

C:\test>set val=somevalue

C:\test>set adder=a(bc)d

C:\test>test
value=somevalue;a(bc)d

"Porque el valor de val no persiste fuera del archivo por lotes"

No es verdad.

C:\test>set | findstr val
val=somevalue;a(bc)d

Otras lecturas

DavidPostill
fuente
1

mi sugerencia es :

if (condition_TRUE) goto goodbye_parenthesis_BEGIN

goto goodbye_parenthesis_END  ----- line when previous condition is FALSE ----
:goodbye_parenthesis_BEGIN ----- line when previous condition is TRUE ----

...
variable treatment
...

:goodbye_parenthesis_END
DKBZA
fuente
¿Puedes explicar esto un poco más?
Toto