Se pueden utilizar dos formas diferentes
utilizar la sintaxis extendida de set
con citas set "var=content"
marcarán var con el contenido, contenidos se cita personajes tan especiales no son problemáticos y utiliza el contenido hasta el última cita (sin la cita en sí)
@echo off
set a=some value with (parentheses) inside
if 1 == 1 (
set "PATH=%a%"
)
uso retrasó la expansión (como la respuesta de shf301), sino también transferir el valor en el ámbito principal.
@echo off
setlocal enabledelayedexpansion
set a=some value with (parentheses) inside
if 1 == 1 (
set "localScope_PATH=!a!"
rem now transfer it to the global scope
FOR /F "delims=" %%A in ("!localScope_PATH!") DO (
endlocal
set "path=%%A"
)
)
En este caso, la configuración de sintaxis extendida no es necesario, que la usaban sólo para evitar espacios ocultos en el extremo de la línea.
EDIT: ¿Puedo combinar esto con EnableDelayedExpansion setlocal y usar! en lugar de% a perezoso evaluar el valor de la variable? ¡Cuando lo intenté, lo conseguí! fue inesperado en este momento.
Puede, pero es contra productivo, como
@echo off
Setlocal EnableDelayedExpansion
set a=some value with (parentheses) inside
if 1 == 1 (
set PATH=!a:^)=^^^)!
set path
)
Luego, su ruta contiene símbolos de intercalación en frente de la )
como C:\programs (x86^)
Para entender cómo funciona la expansión se puede leer SO:How does the Windows Command Interpreter (CMD.EXE) parse scripts?
EDIT2: Más problemas con la ruta (que contiene comillas)
Según este question puede aparecer otro problema con paréntesis cuando la ruta contiene comillas.
la muestra está permitido
path="C:\Program Files (x86)";C:\Program Files (x86)\Skype
Esto, a pesar que no es necesario el uso de comillas aquí, pero esto destruye la sintaxis extendida SET
, como ahora set "newPath=%path%"
se expande a
set "newPath="C:\Program Files (x86)";C:\Program Files (x86)\Skype"
Ahora al menos un paréntesis no está dentro de comillas y es capaz de romper un bloque de comandos.
Pero simplemente puede eliminar todas las comillas de la variable de ruta, como se dijo, las comillas no son necesarias aquí.
set "newPath=%path:"=%"
'set" var = content "' - ¿Quién podría haberlo adivinado? :) –
* En este caso, la sintaxis establecida no es necesaria * ¿Podría explicarlo? –
Lo prefiero, ya que evita problemas con espacios ocultos en el extremo de la línea – jeb