Imagine las siguientes variables de entorno:
SistemaRUTA = C:\Windows
BobUsuarioRUTA =C:\Users\Bob
En un símbolo del sistema, el PATH
comando devuelveC:\Windows;C:\Users\Bob
despues de corrersetx /m PATH "C:\Node;%PATH%"
SistemaRUTA =C:\Node;C:\Windows;C:\Users\Bob
En un nuevo símbolo del sistema, el PATH
comando regresaC:\Node;C:\Windows;C:\Users\Bob;C:\Users\Bob
Otro usuario, Alice, inicia sesión.
Alice'sUsuarioRUTA =C:\Users\Alice
En un símbolo del sistema, el PATH
comando regresaC:\Node;C:\Windows;C:\Users\Bob;C:\Users\Alice
Bob tiene una ruta duplicada en su PATH
variable y Alice tiene las rutas de Bob en su PATH
variable.
¿Hay alguna manera de agregarlo al sistema PATH
sin contaminarlo con el del usuario actual PATH
?
Respuesta1
En Windows 7, puede buscar la ruta del sistema con
reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v path
Si eso todavía funciona en Windows 8, úselo para crear el nuevo valor.
Tendrás que descubrir cómo analizar la salida de reg query
. Aquí hay algo que podría funcionar:
para /f "tokens=1,2*" %a in (' reg query "HKLM\…\Environment" /v path ') establezca currentValue=%c
dónde
- la cadena es el comando (indicado anteriormente) entre comillas simples.
'reg query "HKLM\…\Environment" /v path'
reg query
a
,currentValue
yc
son nombres de variables. Puede elegir los nombres de variable que desee, con la restricción de quea
yc
deben ser letras simples, con dos letras separadas (por ejemplo, puede usarn
yp
ox
yz
).-
for /f "options" %variable in ('command1') do command2
ejecuta , analiza la salida, asigna valores a los (s) ( , arriba; pero ver también a continuación) y ejecuta .command1
%variable
%a
command2
tokens=1,2*
significa que%a
obtiene el primer token (palabra) de cada línea (restante),%b
obtiene la segunda palabra y%c
obtiene el resto de la línea.- La primera palabra es
path
(el nombre del valor). - La segunda palabra es
REG_EXPAND_SZ
(el tipo de valor). - El resto de la línea es el valor.
(Podrías usar
tokens=2*
y luegocurrentValue=%b
).- La primera palabra es
Entonces, después de ejecutar lo anterior, deberías poder hacer
setx PATH "C:\Node;%currentValue%" /m
- Si haces esto en un script (un
.BAT
archivo), usa%%a
y%%c
. - Asegúrese de probar esto con
echo
comandos antes de hacerlo consetx
.
Respuesta2
No coloque la ruta específica de Bob en el valor de Ruta del sistema que utilizan todos.
Lea el valor anterior de la ruta del sistema, modifíquelo y establezca el nuevo valor. Si cmd.exe
(aparentemente el set
comando puede crear/modificar/eliminar pero no leer) no proporciona esas funciones, colóquelo en un programa llamado por el archivo por lotes.
El valor de la ruta del sistema se encuentra (y cambia) a través del Registro. Simplemente busco el valor que sé que tiene para descubrir exactamente dónde, y busco en Google esa ruta clave para comprobar lo que se ha dicho al respecto.
(más tarde: son HKLM\System\CurrentControlSet\Control\Session Manager\Environment
y HKCU\Environment
)
Cualquier lenguaje de scripting más avanzado para Windows, o con soporte API de Windows, puede manejar eso. O bien, un programa compilado ejecutable en el idioma que elija.
La carcasa de repuesto CMDTomar el mandotiene una función @REGQUERY:
echo %@REGQUERY["HKLM_64\System\CurrentControlSet\Control\Session Manager\Environment\Path"]
Como parece que tienes una máquina específica en mente, puedes instalarTCC/LE (gratis)y utilícelo para interpretar su archivo por lotes.