2009-09-24 18 views

Respuesta

3

Tendrá que modificar esta clave del registro:

HKEY_LOCAL_MACHINE \ System \ CurrentControlSet \ Control \ Session Manager \ Environment

Los cambios son efectivos después de reiniciar.

+0

Encontré mi configuración de entorno setx en \ HKEY_CURRENT_USER \ Environment \. Pero gracias por el puntero sobre dónde buscar en el registro. Y, por extraño que parezca, no necesité un reinicio para que afecte al próximo dos \ cmd que abrí. Interesante. – PHenry

4

El comando setx con un valor de cadena vacío no lo elimina. Y eso no es solo una travesura, porque la lógica es bastante diferente. Porque si la variable específica del usuario anula una variable global, entonces no es posible eliminar la variable específica del usuario y hacer que la variable global "vuelva a activarse". La variable específica del usuario de cadena vacía bloquea la variable global. Uno necesita realmente BORRAR (usando la ventana Variables Evironment) para lograr eso.

Hoy he intentado esto, con la variable global JAVA_HOME siendo anulada por un JAVA_HOME específico para el usuario. No fue posible volver a activar la varialla global sin eliminar por completo la variable específica del usuario. Y hasta ahora no he visto un método para hacer eso desde la línea de comandos o el script por lotes.

(No hay suficientes puntos de reputación para añadir comentarios a la respuesta anterior sobre setx, por lo que hay que añadir mi propia respuesta ...)

+0

punto interesante. ver mi respuesta – barlop

11
You may want to make these two permanent with setx but obviously no need to 

    C:\>set uvar=HKCU\Environment 
    C:\> 

    C:\>set mvar=HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment 
    C:\> 

cierta terminología
Dentro de una clave (que es como una carpeta), tiene una variable con algunos datos como a = 5

http://msdn.microsoft.com/en-us/library/3dwk5axy.aspx se refiere al nombre (a) que tiene un valor (5).

La terminología del registro se ve un poco diferente en msdn pero reg.exe y wikipedia parecen consistentes. wikipedia http://en.wikipedia.org/wiki/Windows_Registry dice que "Los valores de registro son pares nombre/datos almacenados dentro de las claves" habla de un par nombre/datos. nombre (a) datos (5) y el par juntos es un valor.

REG parece usar/v, que probablemente se refiere tanto al nombre de la variable como a sus datos (como en wikipedia), muestra tanto el nombre de la variable como sus datos. Y REG tiene una/d que supongo que es solo para datos.

Un ejemplo con setx

C:\>reg query %uvar% 
    HKEY_CURRENT_USER\Environment 
     TEMP REG_EXPAND_SZ %USERPROFILE%\AppData\Local\Temp 
     TMP REG_EXPAND_SZ %USERPROFILE%\AppData\Local\Temp 
     ... 



C:\>setx aaa 3 

C:\>reg query %uvar% 

HKEY_CURRENT_USER\Environment 
    TEMP REG_EXPAND_SZ %USERPROFILE%\AppData\Local\Temp 
    TMP REG_EXPAND_SZ %USERPROFILE%\AppData\Local\Temp 
    ... 
    aaa REG_SZ 3 

Si intenta utilizar setx para eliminarlo, el más cercano que puedes conseguir es borrarlo ya que este artículo del ms KB this MS KB article 195050 dice que te deja con ella todavía en el registro.

setx no eliminar la variable del registro

C:\>setx aaa "" 

SUCCESS: Specified value was saved. 

C:\>reg query %uvar% 

HKEY_CURRENT_USER\Environment 
    TEMP REG_EXPAND_SZ %USERPROFILE%\AppData\Local\Temp 
    TMP REG_EXPAND_SZ %USERPROFILE%\AppData\Local\Temp 
    ... 
    aaa REG_SZ 


C:\> 

Vale la pena señalar, sin embargo, que la variable se ha ido por lo que se refiere a la línea de cmd. echo% aaa% mostrará% aaa% para que la variable desaparezca. Solo hay algo innecesario en el registro ahora.

usuario hace un punto interesante, que ahora cuando intenta establecer una variable de todo el sistema, no funciona. ya que se sobrescribe con lo que está en la variable de usuario, en este caso, siempre aparecerá como indefinido.

C:\>reg delete %uvar% /v aaa 
Delete the registry value aaa (Yes/No)? y 
The operation completed successfully. 

C:\> 

Observe que aaa se ha ido. Abajo.

C:\>reg query %uvar% 

HKEY_CURRENT_USER\Environment 
    TEMP REG_EXPAND_SZ %USERPROFILE%\AppData\Local\Temp 
    TMP REG_EXPAND_SZ %USERPROFILE%\AppData\Local\Temp 
    ... 


C:\> 

Si desea hacerlo para una variable de entorno de sistema/máquina en lugar de una de usuario.

-las líneas de abajo deben ser de una privilegiada cmd pronta
-Notificación la clave es HKLM \ SYSTEM administrativa \ CurrentControlSet \ Control \ Session Manager \ Environment
-La% mvar% (a diferencia% UVAR%) necesita cotizaciones alrededor porque la llave tiene un espacio. Si te pierdes las citas, no es gran cosa que acabas de recibir un error que podría recordarte el uso de comillas.
-Y, por supuesto, si desea establecer una variable de entorno en esa parte del registro con setx, use p. Ej. setx aaa 5 -m, es decir, -m después.

C:\>set mvar=HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment 

C:\>reg delete "%mvar%" /v aaa 
Delete the registry value aaa (Yes/No)? y 
The operation completed successfully. 

C:\> 

nota además
Usted puede ser capaz de crear una variable de entorno solo con REG ADD o REG DELETE .. (en lugar de setx) pero de cualquier manera, al establecer una variable es posible que desee utilizar también configurado, para que esté configurado para la sesión actual y no solo para la siguiente. Y un enlace re setx https://superuser.com/questions/647505/set-enviroment-variable-setx

0

Si desea evitar el reinicio, encontrará una forma de transmitir un WM_SETTINGSCHANGE a cada ventana activa después de haber eliminado el valor.

Eso hará que las nuevas ventanas de CMD se den cuenta de que la variable ha sido eliminada (y cualquier otro programa que entienda WM_SETTNGSCHANGE).

Cuestiones relacionadas