¿Cómo establecer variables de entorno con espacios?

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, necesitamos escribirlo dentro de comillas dobles.

 set value="Hello world" 

Pero, eso no está funcionando también.

Nota: estoy en Windows 7.

La salida de error por el comando setx es causada por un uso incorrecto de las comillas al asignar la cadena al value variable.

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

Pero está mal aquí:

 set value="Hello world" 

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

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

Al expandir la línea

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

el resultado es por lo tanto:

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

Y el comando setx interpreta el parámetro erróneo citado como error de syntax.

Correcto sería usar:

 set "value=Hello world" 

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

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

Entonces solo Hello world está asignado a una variable con nombre de value .

Para obtener más detalles sobre la asignación correcta de una cadena a una variable de entorno, lea la respuesta sobre ¿Por qué no se emite una cadena con ‘echo% var%’ después de usar ‘set var = text’ en la línea de comandos? 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 en el medio depende de la aplicación del comando o respectivamente. El comportamiento al interpretar un argumento con 1 o más " dentro de una cadena de argumento puede variar dependiendo del comstackdor usado como se explica en una respuesta en un archivo por lotes: list rar file in specific folder y write result to text file y por supuesto el código fuente del comando / aplicación.

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

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

Pero hay aplicaciones que requieren citas en el medio de una cadena de argumentos. Un ejemplo de tal aplicación es Windows Explorer .

La siguiente syntax es necesaria para abrir una ventana del Explorador desde un archivo por lotes con el directorio actual en la ventana.

 explorer.exe /e,"%CD%" 

No funciona son:

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

Así que explorer.exe requiere que el directorio se abra después de /e, con comillas en el medio de la cadena de parámetros o interpreta "/e,%CD%" respectivamente "/e %CD%" como nombre del directorio con ruta para mostrar en la ventana del Explorador .

Ver también Opciones de línea de comandos de Windows Explorer :

  • KB130510 (Windows 95, Windows 98, Windows Millennium, Windows NT 4.0)
  • KB152457 (Windows NT 4.0, Windows 2000)
  • KB314853 (Windows XP)

Las opciones de línea de comandos de Windows Explorer documentadas en esos artículos de soporte de Microsoft y siendo las mismas en los 3 artículos también funcionan para Explorer en Windows Server 2003, Windows Vista, Windows Server 2008 R2, Windows 7, Windows Server 2012 R2, Windows 8.0, Windows 8.1, Windows 10, en otras palabras, para Windows de 32 bits y 64 bits.

setx foo “\” este env var tiene espacios y comillas dobles en cada extremo \ “”