Najlepsza praktyka dotycząca zarządzania zmiennymi środowiskowymi PATH / Windows?

22

W tej chwili jest taki bałagan. Za każdym razem, gdy instaluję nowy program, który robi coś trywialnego w wierszu poleceń, muszę go dodać do ścieżki. W rzeczywistości rozwijam się na Ruby, a nawet klejnoty (wtyczki / rozszerzenia) czasami mają swoje własne pliki wykonywalne i są przechowywane w różnych folderach, i ostatecznie muszę dodać kilka ścieżek do aplikacji. Doszło do tego, że przesuwam trzydzieści ścieżek w zmiennej środowiskowej PATH.

Jestem ostrożny przy kopiowaniu i wklejaniu ich do swego rodzaju katalogu domowego i ustawianiu ścieżki do tego; to po prostu źle. Czy brakuje mi sprawdzonej najlepszej praktyki?

Justin L.
źródło
To takie świetne pytanie - uruchamianie programów w systemie UNIX jest tak łatwe, ale taki ból w systemie Windows. Szkoda, że ​​jedyne rozwiązania wciąż wydają się tak ciężką pracą ...
user10550

Odpowiedzi:

13

W moim %UserProfile%\Appsfolderze znajduje się wiele małych, niezależnych narzędzi , takich jak archiwizatory i tym podobne. Potem jest wiele plików wsadowych, które napisałem i często używam, które znajdują się w %UserProfile%\Batches. Co do reszty, po prostu dodaję je do PATH, co jest wykonywane przez instalatora lub za pomocą

setx PATH "%PATH%;%CD%"

z odpowiedniego katalogu. Liczba ścieżek powinna prawdopodobnie stanowić problem tylko wtedy, gdy zawartość będzie zbyt długa (istnieją ograniczenia długości dla zmiennych środowiskowych).

Możesz (i czasami tak robię) pisać małe pliki wsadowe dla takich programów. Proste kopiowanie / hardlinkowanie / symlinkowanie pliku wykonywalnego do innego katalogu prawdopodobnie nie będzie działać w systemie Windows, ale możesz łatwo utworzyć plik wsadowy, na przykład dla programu Foo:

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

i możesz następnie dodać folder, w którym przechowujesz te pliki wsadowe PATH.

Joey
źródło
Jak działają te wsadowe pliki wsadowe? Czy działają dokładnie tak, jak wymagają rzeczywistej ścieżki? Jeśli tak, to jest niesamowite.
Justin L.,
@ Justin: Po prostu przekazują wszystkie argumenty podane w pliku wsadowym do rzeczywistego programu. Gdzie się znajduje, będziesz musiał poznać siebie.
Joey
Hm; Powinienem wyjaśnić - czy istnieje jakaś funkcjonalna różnica między dodaniem katalogu pliku binarnego do PATH a utworzeniem pliku wsadowego wappera pliku binarnego w niestandardowym katalogu, który znajduje się w PATH?
Justin L.,
@ Justin: Jeśli ponownie użyjesz plików wsadowych w plikach wsadowych, to będzie. Poza tym nie jestem świadomy żadnego.
Joey
@Joey Podoba mi się pomysł na opakowanie, dobry do uruchamiania programów z cmd, ale podczas uruchamiania od początku .. uruchom rozproszenie okna cmd przed uruchomieniem programu jest rozproszone, czy masz na to jakiś sposób? wydaje się, że równie dobrze można umieścić katalogi dla wszystkich programów na ścieżce i pozwolić, aby był długi. tak blisko, ale jak dotąd!
barlop
10

Nie jestem pewien konkretnych najlepszych praktyk. Ale wolę używać narzędzi GUI PATH Editor do zarządzania zmiennymi PATH. Aby można było to wyraźnie utrzymać.

Lista edytora PATH -

Szybki edytor środowiska

Redmond PATH Editor

ukanth
źródło
Redaktorzy graficzni mogą znacznie ułatwić heh
Justin L.,
Ten redaktor PATH to dokładnie to, czego szukałem. +1
Nathan Ridley
Pytanie dotyczyło ZARZĄDZANIA zmienną, a nie tylko dodawania elementów. Jest to więc najbardziej poprawna odpowiedź, a IMO najlepsza praktyka, ponieważ inne rozwiązania ukrywają większość treści zmiennej PATH.
taurelas
2

Teraz, gdy większość komputerów z systemem Windows jest dostarczanych z programem PowerShell, używam wielu poleceń sal / Set-Alias ​​w moim profilu użytkownika, więc jeśli aplikacja ma tylko jedną lub dwie aplikacje, których używam, utworzę aliasy tylko dla tych dwóch poleceń zamiast dodawać cały folder aplikacji do ścieżki. Przykłady obejmują SQL Management Studio, Notepad ++, TFS Power Tools (narzędzie wiersza polecenia, tfpt.exe). Kopiuję również swój profil użytkownika między komputerami, więc pozwala mi to sprawdzić istnienie tej aplikacji na bieżącym komputerze przed utworzeniem aliasu (czasami ostrzegam, jeśli aplikacja nie jest zainstalowana).

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
źródło