Prática recomendada para o gerenciamento de variáveis ​​PATH / ambiente do Windows?

22

Agora, está uma bagunça. Toda vez que instalo um novo programa que faz algo trivial na linha de comando, tenho que adicioná-lo ao caminho. Na verdade, estou desenvolvendo Ruby e até mesmo gems (plugins / extensões) às vezes têm seus próprios executáveis, e são armazenados em pastas diferentes e acabo tendo que adicionar vários caminhos por aplicativo também. Chegou ao ponto de eu estar empurrando trinta caminhos na minha variável de ambiente PATH.

Sou cauteloso ao copiá-los e colá-los em uma espécie de pasta pessoal e definir o caminho para isso; apenas parece errado. Há uma prática recomendada estabelecida que estou perdendo?

Justin L.
fonte
Essa é uma ótima pergunta - a execução de programas é tão fácil no UNIX, mas é tão trabalhosa no Windows. É uma vergonha que as únicas soluções ainda parecer um trabalho tão duro ...
user10550

Respostas:

13

Vários utilitários independentes pequenos residem em minha %UserProfile%\Appspasta, como arquivadores e similares. Existem vários arquivos em lote que eu escrevi e uso com freqüência que residem %UserProfile%\Batches. Quanto ao resto, eu apenas os adiciono ao PATH, que é feito por um instalador ou com

setx PATH "%PATH%;%CD%"

do diretório apropriado. O número de caminhos provavelmente só deve se tornar um problema se o conteúdo for muito longo (existem limites de comprimento para variáveis ​​de ambiente).

Você pode (e às vezes o faço) escrever pequenos arquivos em lote de invólucro para esses programas. Simplesmente copiar / vincular / vincular o executável a outro diretório provavelmente não funcionará no Windows, mas você pode criar facilmente um arquivo em lotes, por exemplo, para o programa Foo:

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

e você pode adicionar a pasta na qual armazena esses arquivos em lotes no seu PATH.

Joey
fonte
Como esses arquivos em lote do wrapper funcionam? Eles funcionam exatamente como exigindo o caminho real? Se assim for, isso é incrível.
Justin L.
@ Justin: Eles apenas delegam todos os argumentos fornecidos ao arquivo em lotes para o programa real. Onde reside, você terá que se conhecer.
Joey
Hum; Devo esclarecer - existe alguma diferença funcional entre adicionar o diretório do binário ao PATH e criar um arquivo em lote wapper do binário em um diretório personalizado que esteja no PATH?
Justin L.
@ Justin: Se você usar os arquivos em lotes em arquivos em lotes novamente, então existe. Além disso, não conheço nenhum.
Joey
@ Joey Eu gosto da idéia do wrapper, boa para iniciar programas a partir do cmd, mas ao iniciar a partir do start..run é uma distração para uma janela do cmd saltar antes do lançamento do programa, você tem uma maneira de contornar isso? parece que se pode colocar os diretórios de todos os programas no caminho e deixá-lo longo. tão perto ainda tão longe!
barlop
10

Não tenho certeza sobre quaisquer práticas recomendadas específicas. Mas eu prefiro usar as ferramentas do GUI PATH Editor para gerenciar variáveis ​​PATH. Para que possa ser claramente mantido.

Lista do Editor PATH -

Editor de ambiente rápido

Redmond PATH Editor

ukanth
fonte
Editores gráficos pode tornar as coisas muito mais fácil heh
Justin L.
O editor Redmond PATH é exatamente o tipo de coisa que eu estava procurando. 1
Nathan Ridley
A pergunta era sobre GERENCIAR a variável, não apenas adicionando os itens. Portanto, essa é a resposta mais correta e a IMO é a melhor prática, pois outras soluções ocultam a maior parte do conteúdo da variável PATH.
taurelas 27/09/17
2

Agora que a maioria das máquinas Windows vem com o PowerShell, eu uso muitos comandos sal / Set-Alias ​​no meu perfil de usuário; portanto, se um aplicativo tiver apenas um ou dois aplicativos, crio aliases para esses dois comandos em vez de adicionar o pasta de aplicativos inteira para o caminho. Os exemplos incluem SQL Management Studio, Notepad ++, TFS Power Tools (ferramenta de linha de comando, tfpt.exe). Também copio meu perfil de usuário nas máquinas, para que eu verifique a existência desse aplicativo na máquina atual antes de criar o alias (às vezes aviso se o aplicativo não estiver instalado).

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
fonte