¿Cómo configurar variables de entorno con espacios?

Resuelto Srijani Ghosh asked hace 8 años • 2 respuestas

Necesito establecer valores para una variable ambiental usando un archivo por lotes. Escribí el guión para esto:

@echo off
set value="Hello world"
setx -M srijani "%srijani%;%value%"

Da el error:

ERROR: Invalid syntax. Default option is not allowed more than '2' time(s).
Type "SETX /?" for usage.

Busqué en Google y descubrí que al usar espacios en blanco debemos escribirlo entre comillas dobles.

set value="Hello world"

Pero eso tampoco está funcionando.

Nota: estoy en Windows 7.

Srijani Ghosh avatar Dec 18 '15 17:12 Srijani Ghosh
Aceptado

El error generado por el comando setx se debe al uso incorrecto de las comillas al asignar la cadena a la variable value.

El comando está configurado y el parámetro es variable=value. Como ocurre con la mayoría de los comandos y aplicaciones, es posible (y a menudo es necesario) encerrar un parámetro entre comillas dobles si contiene 1 o más espacios o cualquier otro carácter de esta lista: &()[]{}^=;!'+,`~. Esos caracteres se muestran en la última salida de la página de ayuda ejecutándose en una ventana del símbolo del sistema cmd /?o help cmd.

Pero el error está aquí:

set value="Hello world"

Con la primera comilla doble después del signo igual, todo el parámetro del conjuntovariable=value de comandos no está entre comillas dobles.

Esto da como resultado la interpretación de las comillas dobles como parte de la cadena para asignar a la variable con nombre value. Todo, desde el signo igual hasta el final de la línea, incluidas las comillas dobles y posiblemente los espacios finales y las tabulaciones horizontales existentes, se asigna aquí a la variable valueen lugar de solo a la cadena Hello worldcomo se esperaba.

Sobre la ampliación de la línea

setx -M srijani "%srijani%;%value%"

el resultado es por tanto:

setx -M srijani "Value of variable srijani;"Hello world""

Y el comando setx interpreta el parámetro citado incorrectamente como un error de sintaxis.

Lo correcto sería usar:

set "value=Hello world"

Ahora todo el parámetro del conjunto de comandos está entre comillas dobles. Por lo tanto, se ignoran al analizar la línea:

  • todos los espacios/tabulaciones entre el conjunto de comandos y la primera comilla doble,
  • la primera comilla doble,
  • la última comilla doble,
  • y todos los espacios/tabulaciones quizás existentes después de la última comilla doble.

Entonces solo Hello worldse asigna a una variable con nombre value.

Para obtener más detalles sobre la asignación correcta de una cadena a una variable de entorno, lea la respuesta en ¿Por qué no aparece ninguna cadena con 'echo %var%' después de usar 'set var = text' en la línea de comando? También contiene un código de lote de demostración simple.

Más información:

La forma en que se interpreta una cadena de argumento que contiene 1 o más comillas en algún lugar intermedio depende del comando y de la aplicación. El comportamiento al interpretar un argumento con 1 o más "dentro de una cadena de argumento puede variar según el compilador utilizado, como se explica en una respuesta en un archivo por lotes: enumere el archivo rar en una carpeta específica y escriba el resultado en un archivo de texto y, por supuesto, en el código fuente del comando. / solicitud.

Para la mayoría de los comandos y aplicaciones, la sintaxis correcta es:

command "parameter in quotes"
"Path to application\app.exe" "parameter in quotes" 

Pero hay aplicaciones que requieren comillas en medio de una cadena de argumentos. Un ejemplo de una aplicación de este tipo es el Explorador de Windows .

Se requiere la siguiente sintaxis para abrir una ventana del Explorador desde un archivo por lotes con el directorio actual mostrado en la ventana.

explorer.exe /e,"%CD%"

No funcionan son:

explorer.exe "/e,%CD%"
explorer.exe /e "%CD%"

Por lo tanto, explorer.exerequiere que el directorio que se abrirá se especifique después /e,con comillas en medio de la cadena de parámetros o que se interprete "/e,%CD%"respectivamente "/e %CD%"como el nombre del directorio con la ruta para mostrar en la ventana del Explorador .

Consulte también SS64: opciones de línea de comandos del Explorador de Windows .

Mofi avatar Dec 21 '2015 19:12 Mofi

setx foo "\"esta var env tiene espacios y comillas dobles en cada extremo\""

 avatar Jul 02 '2018 00:07