Le migliori pratiche per la gestione delle variabili PATH / ambiente di Windows?


22

In questo momento, è un tale casino. Ogni volta che installo un nuovo programma che fa qualcosa di banale nella riga di comando, devo aggiungerlo al percorso. In effetti, sto sviluppando su Ruby e anche le gemme (plug-in / estensioni) a volte hanno i loro eseguibili e sono archiviate in cartelle diverse e finisco per aggiungere anche diversi percorsi per applicazione. È arrivato al punto che sto spingendo trenta percorsi nella mia variabile d'ambiente PATH.

Sono cauto nel copiarli e incollarli in una sorta di cartella home e impostarne il percorso; sembra solo sbagliato. Esiste una pratica consolidata che mi manca?


Questa è una grande domanda: l'esecuzione di programmi è così semplice su UNIX, ma un tale dolore su Windows. È un peccato che le uniche soluzioni sembrino ancora un duro lavoro ...
user10550,

Risposte:


13

Un certo numero di piccole utility autonome risiedono nella mia %UserProfile%\Appscartella, come archivi e simili. Poi ci sono un certo numero di file batch che ho scritto e che uso frequentemente in cui risiedono %UserProfile%\Batches. Per il resto, li aggiungo semplicemente a PATH, che viene eseguito da un programma di installazione o con

setx PATH "%PATH%;%CD%"

dalla directory appropriata. Il numero di percorsi lì dovrebbe probabilmente diventare un problema solo se il contenuto diventa troppo lungo (ci sono limiti di lunghezza per le variabili di ambiente).

È possibile (e talvolta lo faccio) scrivere piccoli file batch wrapper per tali programmi. La semplice copia / hardlink / collegamento simbolico dell'eseguibile in un'altra directory probabilmente non funzionerà su Windows ma è possibile creare facilmente un file batch, ad esempio per il programma Foo:

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

e puoi quindi aggiungere la cartella in cui memorizzi quei file batch sul tuo PATH.


Come funzionano questi file batch wrapper? Funzionano esattamente come richiedono il percorso effettivo? Se è così, questo è fantastico.
Justin L.,

@Justin: delegano semplicemente tutti gli argomenti dati al file batch al programma reale. Dove risiede, dovrai conoscere te stesso.
Joey,

hm; Dovrei chiarire: c'è qualche differenza funzionale tra l'aggiunta della directory del binario a PATH e la creazione di un file batch wapper del binario in una directory personalizzata che si trova sul PERCORSO?
Justin L.,

@Justin: se usi nuovamente i file batch nei file batch, allora c'è. A parte questo non ne sono a conoscenza.
Joey,

@Joey Mi piace l'idea del wrapper, ottima per l'avvio dei programmi da cmd, ma quando si avvia dall'inizio ... correre è una distrazione per una finestra cmd saltare prima dell'avvio del programma, hai un modo per aggirare questo? sembra che si possano anche mettere le directory di tutti i programmi nel percorso e lasciare che sia lungo. così vicino ancora così lontano!
barlop

10

Non sono sicuro di alcuna best practice specifica. Ma preferisco usare gli strumenti GUI PATH Editor per gestire le variabili PATH. In modo che possa essere chiaramente mantenuto.

Elenco di PATH Editor -

Editor rapido dell'ambiente

Redmond PATH Editor


Gli editor grafici potrebbero rendere le cose molto più facili heh
Justin L.,

Quell'editor di Redmond PATH è esattamente il tipo di cosa che stavo cercando. +1
Nathan Ridley,

La domanda riguardava la GESTIONE della variabile, non solo l'aggiunta degli elementi. Quindi questa è la risposta più corretta e IMO la migliore pratica poiché altre soluzioni nascondono la maggior parte del contenuto della variabile PATH.
Taurelas,

2

Ora che la maggior parte delle macchine Windows viene fornita con PowerShell, utilizzo molti comandi sal / Set-Alias ​​nel mio profilo utente, quindi se un'app ha solo una o due app che uso creerò alias solo per quei due comandi invece di aggiungere il intera cartella dell'app al percorso. Esempi includono SQL Management Studio, Notepad ++, TFS Power Tools (strumento da riga di comando, tfpt.exe). Copio anche il mio profilo utente su macchine, quindi questo mi permette di verificare l'esistenza di quell'app sulla macchina corrente prima di creare l'alias (a volte avvisando se l'app non è installata).

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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.