¿Práctica recomendada para la gestión de variables de entorno / RUTA de Windows?

22

En este momento, es un desastre. Cada vez que instalo un nuevo programa que hace algo trivial en la línea de comando, tengo que agregarlo a la ruta. De hecho, estoy desarrollando en Ruby e incluso las gemas (complementos / extensiones) a veces tienen sus propios ejecutables, y se almacenan en diferentes carpetas y también tengo que agregar varias rutas por aplicación. Llegué al punto de que estoy empujando treinta caminos en mi variable de entorno PATH.

Soy cauteloso al copiarlos y pegarlos en una carpeta de inicio y establecer la ruta a eso; Simplemente se siente mal. ¿Existe una mejor práctica establecida que me estoy perdiendo?

Justin L.
fuente
Esta es una gran pregunta: ejecutar programas es muy fácil en UNIX, pero es muy difícil en Windows. Es una pena que las únicas soluciones todavía parezcan un trabajo tan duro ...
user10550

Respuestas:

13

Una serie de pequeñas utilidades autónomas residen en mi %UserProfile%\Appscarpeta, como archivadores y similares. Luego hay una serie de archivos por lotes que escribí y uso con frecuencia en los que residen %UserProfile%\Batches. Por lo demás, solo los agrego al PATH, que es realizado por un instalador o con

setx PATH "%PATH%;%CD%"

desde el directorio apropiado. El número de rutas allí probablemente solo debería convertirse en un problema si el contenido es demasiado largo (hay límites de longitud para las variables de entorno).

Puede (y a veces lo hago) escribir pequeños archivos por lotes para estos programas. Simplemente copiar / hardlinking / symlinking del ejecutable en otro directorio probablemente no funcionará en Windows, pero puede crear fácilmente un archivo por lotes, por ejemplo para el programa Foo:

@"%ProgramFiles%\Foosoft Foo\foo.exe" %*

y luego puede agregar la carpeta donde almacena esos archivos por lotes a su PATH.

Joey
fuente
¿Cómo funcionan estos archivos por lotes de envoltura? ¿Funcionan exactamente como requieren el camino real? Si es así, esto es asombroso.
Justin L.
@Justin: Simplemente delegan todos los argumentos dados al archivo por lotes en el programa real. Donde eso reside tendrás que conocerte a ti mismo.
Joey
Hm; Debo aclarar: ¿hay alguna diferencia funcional entre agregar el directorio del binario a PATH y crear un archivo por lotes wapper del binario en un directorio personalizado que está en el PATH?
Justin L.
@Justin: Si usa los archivos por lotes en archivos por lotes nuevamente, entonces los hay. Aparte de eso, no tengo conocimiento de ninguno.
Joey
@Joey Me gusta la idea del contenedor, buena para iniciar programas desde cmd, pero cuando se inicia desde el inicio ... es una distracción que una ventana de cmd salte antes de que se inicie el programa, ¿tienes alguna forma de evitarlo? parece que uno también puede poner los directorios de todos los programas en la ruta y dejar que sea largo. tan cerca pero tan lejos!
barlop
10

No estoy seguro de las mejores prácticas específicas. Pero prefiero usar las herramientas de GUI PATH Editor para administrar las variables PATH. Para que se pueda mantener claramente.

Lista de PATH Editor -

Editor de entorno rápido

Redmond PATH Editor

ukanth
fuente
Los editores gráficos pueden hacer las cosas mucho más fáciles, je
Justin L.
Ese editor de Redmond PATH es exactamente el tipo de cosas que estaba buscando. +1
Nathan Ridley
La pregunta era sobre GESTIONAR la variable, no solo agregar los elementos. Esta es la respuesta más correcta e IMO es la mejor práctica, ya que otras soluciones ocultan la mayor parte del contenido de la variable PATH.
taurelas
2

Ahora que la mayoría de las máquinas con Windows vienen con PowerShell, uso muchos comandos sal / Set-Alias ​​en mi perfil de usuario, por lo que si una aplicación solo tiene una o dos aplicaciones que usaré, crearé alias solo para esos dos comandos en lugar de agregar el carpeta completa de la aplicación a la ruta. Los ejemplos incluyen SQL Management Studio, Notepad ++, TFS Power Tools (herramienta de línea de comandos, tfpt.exe). También copio mi perfil de usuario en las máquinas, por lo que esto me permite verificar la existencia de esa aplicación en la máquina actual antes de crear el alias (a veces advierto si la aplicación no está instalada).

filter ctQuoteString { "`"$_`"" }
filter ctResolvePath { Resolve-Path $_ | select -ExpandProperty Path | ctQuoteString } # used in Edit.ps1

$nppExe = "C:\Program Files (x86)\Notepad++\notepad++.exe"
if ((Test-Path variable:\nppExe) -and (Test-Path $nppExe)) {
    function EditNotepadPP { 
        param ([parameter(ValueFromPipelineByPropertyName=$true)][Alias("FullName","FileName")]$Path) 
        begin { if (! $nppExe) { throw 'variable $nppExe is not defined' } }
        process {
            $Path | ctResolvePath | % { # ctResolvePath will get full path and surround with quotes
                & $nppExe $_
            }
            #AddEditHistory $Path #if you need detailed time tracking, might help to create a log what files you're editting
       } 
    }
    Set-Alias npp EditNotepadPP
}

# I have similar functions for other apps.
Set-Alias vs EditVS
Set-Alias tfe EditTFCheckout
yzorg
fuente