Próbuję ustawić zmienne środowiskowe za pomocą setx
polecenia, takie jak poniżej
setx PATH "f: \ common tools \ git \ bin; f: \ common tools \ python \ app; f: \ common tools \ python \ app \ scripts; f: \ common tools \ ruby \ bin; f: \ masm32 \ bin; F: \ Borland \ BCC55 \ Bin;% PATH% "
Jednak pojawia się następujący błąd, jeśli wartość jest dłuższa niż 1024 znaki:
OSTRZEŻENIE: Zapisywane dane są skracane do 1024 znaków.
SUKCES: Określona wartość została zapisana.
Ale niektóre ścieżki na końcu nie są zapisywane w zmiennej, chyba z powodu limitu znaków, jak sugeruje błąd.
windows-7
environment-variables
windows-server-2008-r2
Madhur Ahuja
źródło
źródło
%PATH%
na stronie superuser.com/questions/297947Odpowiedzi:
Najlepszym rozwiązaniem jest bezpośrednia edycja rejestru.
Przejdź do
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment
i edytujPath
wartość (następnie uruchom ponownie, aby aktywować nową wartość).Należy jednak pamiętać, że chociaż można wprowadzić bardzo długą ścieżkę (do maksymalnej długości zmiennej środowiskowej; 2048 lub 32 768 bajtów w zależności od źródła), nie każde oprogramowanie będzie w stanie poprawnie odczytać i obsłużyć ją, jeśli będzie ona zbyt długa.
źródło
setx
edytuje rejestr, jak wskazałem, a następnie rozgłaszaWM_SETTINGCHANGE
komunikat. Informuje to wszystkie okna najwyższego poziomu, że zmieniło się ustawienie systemowe (w tym przypadku zmienna środowiskowa). Bez tego Explorer i programy, które otworzysz za jego pomocą, nie będą wiedzieć o zmianie. Państwo mogłoby nadawać samemu wiadomość ręcznie (pisałem program właśnie do tego, a plik wsadowy do zastąpieniaSETX
sprawia, że edytowanie rejestru następuje przez Broadcast), ale tak jaksetx
i dialogowe właściwości systemu envvar, ma efekty uboczne, które zaleca się ponowne uruchomienie komputera.:-|
jeśli używasz systemu Windows Vista lub nowszego, możesz zrobić
symbolic link
w folderze. na przykład:utworzy link, tak jak
c:\pf
folder plików programu. Używając tej sztuczki, ogoliłem 300 znaków ze swojej ścieżki.(Wiem, że nie jest to związane z setx, ale jest przydatne dla osób, które szukają zbyt dużych limitów 1024 znaków)
źródło
Możesz użyć skryptu PowerShell podobnego do następującego:
Environment.SetEnvironmentVariable () wywołanie API będzie nadawać
WM_SETTINGCHANGE
, dzięki czemu nie trzeba ponownie uruchomić.źródło
[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');"
To narzędzie wiersza polecenia SetEnv typu open source jest dobre do edycji PATH i innych zmiennych środowiskowych bez ograniczeń. Wykorzystuje bufor dynamiczny, więc nie ma ograniczeń statycznych, takich jak 1024.
http://www.codeproject.com/Articles/12153/SetEnv
Wybór% jako prefiksu do dołączenia do zmiennej mógłby być jednak lepszy, ponieważ utrudnia czasem składnię, jeśli jest używana z innymi lokalnymi zmiennymi wsadowymi ...
źródło
O wiele lepszym narzędziem niż setx do manipulowania ścieżkami jest pathed.exe . Niestety, ogranicza się to do edycji ścieżki.
Oprócz lepszego doświadczenia użytkownika niż setx, nie masz limitu 1024 znaków. W przeciwieństwie do bezpośredniej manipulacji rejestrem, ta aplikacja używa wywołania API Environment.SetEnvironmentVariable (), które będzie nadawać
WM_SETTINGCHANGE
.źródło
Moim ulubionym sposobem jest zmiana nazw folderów w zmiennych PATH, aby używały nazw 8.3. Ta odpowiedź StackOverflow ma niesamowity skrypt (uruchamiany z pliku .bat), który wygeneruje „zminimalizowaną” wersję całej zmiennej PATH, którą można następnie wkleić w oknie dialogowym edycji zmiennej. Jedynym zastrzeżeniem jest to, że będziesz musiał podzielić części SYSTEMU i UŻYTKOWNIKA. Gdy skrypt przechodzi i wykrywa zminimalizowaną wersję dla każdego folderu, odrzuca i ostrzega o wszelkich nieprawidłowych / nieistniejących ścieżkach. Miły mały bonus za sprzątanie.
źródło
fsutil.exe behavior set disable8dot3 1
.fsutil 8dot3name strip
PO za pomocą skryptu na pewno spowodowałoby problemy dla folderów, których dotyczy problem.fsutil 8dot3name strip
wcześniejszym użyciu niektórych i biorąc pod uwagę, że (a) najpierw sprawdza rejestr i (b) ścieżka jest przechowywana w rejestrze, moje wcześniejsze obawy mogą być nieuzasadnione, o ile użytkownik nie skorzysta z/f
opcji (wymuś) .Możesz umieścić tę linię w swoim BAT:
Zobacz podwójne
%%
.(Odniesienie: https://support.microsoft.com/en-us/kb/75634 )
źródło
%path%;c:\...[snip]...\7z
dopath
zmiennej użytkownika , upuszczając wszystko, co tam byłeś.%path%
zmiennej środowiskowej ścieżki lokalnej nie powinno mieć żadnego wpływu.jeśli nie jest wymagane oddzielanie ŚCIEŻKI systemu i ŚCIEŻKI użytkownika:
źródło
Myślę, że najlepszym sposobem jest następny (z PowerShell). W ten sposób unikniesz również najmniejszej liczby 1024 znaków.
Możesz zobaczyć kod na: https://gist.github.com/drazul/b92f780689bd89a0d2a7
źródło