batch-file - java_home - variable path windows 10
¿Cómo establecer variables de entorno con espacios? (2)
La salida de error del comando
setx
es causada por el 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 la última salida de la página de ayuda al ejecutarse en una ventana de símbolo del sistema
cmd /?
o
help cmd
.
Pero mal está 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 se incluye 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
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 pestañas horizontales se asigna aquí a un
value
variable en lugar de solo 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 citado incorrecto como error de sintaxis.
Correcto estaría usando:
set "value=Hello world"
Ahora todo el parámetro del conjunto de comandos está encerrado entre comillas dobles. Por lo tanto, se ignoran al analizar la línea:
- todos los espacios / pestañas entre el conjunto de comandos y la primera comilla doble,
- la primera cita doble,
- la última doble cita,
- y todos los espacios / pestañas quizás existentes después de la última comilla doble.
Entonces solo
Hello world
se asigna a una variable con
value
nombre.
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 hay salida de cadena con ''echo% var%'' después de usar ''set var = text'' en la línea de comandos? Contiene también 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 punto intermedio depende del comando, respectivamente, 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 el
archivo
por
lotes: enumere el archivo rar en una carpeta específica y escriba el resultado en el archivo de texto
y, por supuesto, el código fuente del comando / aplicación.
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 el medio de una cadena de argumento. Un ejemplo de tal aplicación 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 en la ventana.
explorer.exe /e,"%CD%"
No funcionan son:
explorer.exe "/e,%CD%"
explorer.exe /e "%CD%"
Así que
explorer.exe
requiere que el directorio para abrir se especifique después de
/e,
con comillas en el medio de la cadena de parámetros o que interprete
"/e,%CD%"
respectivamente
"/e %CD%"
como el nombre del directorio con la ruta para mostrar en la ventana del
Explorador
.
Vea también SS64 - Opciones de línea de comandos del Explorador de Windows .
Necesito establecer valores a 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 funciona.
Nota: estoy en Windows 7.
setx foo "/" este entorno tiene espacios y comillas dobles en cada extremo / ""