Estoy tratando de establecer variables de entorno utilizando el setx
comando, como el siguiente
setx PATH "f: \ herramientas comunes \ git \ bin; f: \ herramientas comunes \ python \ app; f: \ herramientas comunes \ python \ app \ scripts; f: \ herramientas comunes \ ruby \ bin; f: \ masm32 \ bin; F: \ Borland \ BCC55 \ Bin;% PATH% "
Sin embargo, obtengo el siguiente error si el valor tiene más de 1024 caracteres de longitud:
ADVERTENCIA: Los datos que se guardan se truncan a 1024 caracteres.
ÉXITO: se guardó el valor especificado.
Pero algunas de las rutas al final no se guardan en variable, supongo que debido al límite de caracteres como sugiere el error.
windows-7
environment-variables
windows-server-2008-r2
Madhur Ahuja
fuente
fuente
%PATH%
al superuser.com/questions/297947Respuestas:
Su mejor opción es editar el registro directamente.
Navegue
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment
y edite elPath
valor (luego reinicie para activar el nuevo valor).Sin embargo, tenga en cuenta que si bien puede ingresar una ruta muy larga (hasta la longitud variable máxima del entorno; 2,048 o 32,768 bytes dependiendo de la fuente), no todo el software podrá leerlo y manejarlo correctamente si es demasiado largo.
fuente
setx
edita el registro como indiqué, luego emite unWM_SETTINGCHANGE
mensaje. Esto le dice a todas las ventanas de nivel superior que la configuración del sistema ha cambiado (en este caso, una variable de entorno). Sin eso, Explorer y los programas que abriste con él no sabrán sobre el cambio. Usted podría transmitir el mensaje a sí mismo de forma manual (I escribió un programa para hacer precisamente eso, y un archivo por lotes para reemplazarSETX
eso hace la edición del registro seguido de la emisión), pero al igualsetx
y de diálogo Propiedades del sistema varentorno, tiene efectos secundarios que las hacer reinicio preferible.:-|
Si está utilizando Windows Vista o superior, puede hacer un
symbolic link
a la carpeta. por ejemplo:haría un enlace, así
c:\pf
sería su carpeta de archivos de programa. Eliminé 300 caracteres de mi camino usando este truco.(Sé que no está relacionado con setx, pero es útil para las personas que buscan sobrecomprar en el límite de 1024 caracteres)
fuente
Puede usar un script de PowerShell similar al siguiente:
La llamada a la API Environment.SetEnvironmentVariable () se transmitirá,
WM_SETTINGCHANGE
por lo que no es necesario reiniciar.fuente
[Environment]::SetEnvironmentVariable('path', "$newPath;$oldPath",'Machine')
?@"%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe" -NoProfile -ExecutionPolicy Bypass -Command "[Environment]::SetEnvironmentVariable('path',\"C:\Program Files (x86)\GNU\GnuPG;$([Environment]::GetEnvironmentVariable('path','Machine'))\",'Machine');"
Esta herramienta de línea de comandos SetEnv de código abierto es buena para editar la RUTA y otras variables de entorno sin limitaciones. Utiliza un búfer dinámico para que no haya limitaciones estáticas como 1024.
http://www.codeproject.com/Articles/12153/SetEnv
Sin embargo, la elección de un% como prefijo para agregar a una variable podría haber sido mejor, ya que a veces dificulta la sintaxis si se usa con otras variables locales por lotes ...
fuente
Una herramienta muy superior a setx para la manipulación de rutas es pathed.exe . Desafortunadamente, se limita a editar la ruta.
Además de una experiencia de usuario superior a la de setx, no tiene un límite de 1024 caracteres. A diferencia de la manipulación directa del registro, esta aplicación utiliza la llamada API Environment.SetEnvironmentVariable () que emitirá
WM_SETTINGCHANGE
.fuente
Mi forma favorita es cambiar los nombres de las carpetas en las variables PATH para usar los nombres 8.3. Esta respuesta de StackOverflow tiene un script impresionante (ejecutado desde un archivo .bat) que generará la versión "minificada" de toda la variable PATH, que luego puede pegar en el cuadro de diálogo Editar variable. La única advertencia es que necesitará dividir las partes SYSTEM y USER. A medida que la secuencia de comandos avanza y descubre la versión minimizada para cada carpeta, descarta y le alerta sobre cualquier ruta no válida / inexistente. Bonito bono de limpieza.
fuente
fsutil.exe behavior set disable8dot3 1
.fsutil 8dot3name strip
DESPUÉS de usar el script definitivamente causaría problemas para las carpetas afectadas.fsutil 8dot3name strip
hoy y considerando que (a) primero verifica el registro y (b) la ruta está almacenada en el registro, mi preocupación anterior puede no estar justificada, siempre y cuando el usuario no use la/f
opción (forzar) .Puedes poner esta línea en tu BAT:
Ver el doble
%%
.(Referencia: https://support.microsoft.com/en-us/kb/75634 )
fuente
%path%;c:\...[snip]...\7z
en lapath
variable de usuario , dejando caer cualquier otra cosa que tenga allí.%path%
en la ruta local la variable de entorno no debería tener ningún efecto.Si no es necesario mantener separadas la RUTA del sistema y la RUTA del usuario:
fuente
Creo que la mejor manera es la siguiente (con PowerShell). De esta manera también evitarás el litmit de 1024 caracteres.
Puede ver el código en: https://gist.github.com/drazul/b92f780689bd89a0d2a7
fuente