Zmienna środowiskowa jest zbyt duża w systemie Windows 10

147

Wiem, że to dziwne i spędziłem prawie 3 dni na poszukiwaniu rozwiązania w Internecie, ale nie znalazłem przydatnego. Więc zdecydowałem się tu przyjechać.

Niedawno zaktualizowałem system do Windows 10 z Windows 8.1.

Teraz chciałem ustawić zmienną środowiskową dla mojej nowej instalacji Apache Maven.

Za każdym razem, gdy tworzyłem zmienną użytkownika, wszystko jest w porządku. Jednak muszę również utworzyć zmienną systemową, w której będę musiał dołączyć katalog bin do zmiennej, którą już tworzę w zmiennej użytkownika, aby była to „ścieżka”.

Teraz za każdym razem, gdy to robię, otrzymuję błąd, który mówi: „Ta zmienna środowiskowa jest zbyt duża. W rezultacie nie mogę utworzyć ścieżki.

Załączam zdjęcie tego błędu.

Docenię to, jeśli ktoś może mi pomóc rozwiązać ten problem.

Z góry dziękuję za twoją pomoc.wprowadź opis obrazu tutaj

olammy
źródło
14
Mam nadzieję, że pewnego dnia to naprawią. To nigdy nie powinno się zdarzyć. ^^
itmuckel
1
Prawidłowym rozwiązaniem jest zaprzestanie nadużywania PATHzmiennej środowiskowej przez aplikacje . Właściwe rozwiązanie istnieje już prawie 2 dekady . Ale skłonienie programistów do korzystania z tego jest jak wyrywanie zębów.
Ian Boyd,

Odpowiedzi:

148

Kiedy zmienna PATH zostaje przeciążona zbyt dużą liczbą wartości, osiąga punkt, w którym nie można już dodawać wartości. Wykonanie poniższych czynności powinno rozwiązać problem.

Rozwiązanie 1:

  1. Utwórz nową zmienną systemową i powiedz „NEWPATH”
  2. Przypisz lokalizację katalogu bin do „NEWPATH”
  3. Teraz dołącz ' ; % NEWPATH% 'do zmiennej PATH

Jeśli to nadal nie działa, spróbuj skopiować część zmiennej PATH już istniejących wartości do „NEWPATH”, a następnie dodaj „NEWPATH”

Rozwiązanie 2:

Sprawdź wartość zmiennej PATH, jeśli możesz grupować i skracać ścieżki. Na przykład,

C: \ Program Files \ Microsoft SQL Server \ 102 \ Tools \ Binn \; C: \ Program Files \ Microsoft SQL Server \ 102 \ DTS \ Bin \;

można łączyć z

C: \ Program Files \ Microsoft SQL Server;

W ten sposób możesz zbudować więcej miejsca w zmiennej PATH o stałej długości i ostatecznie dostosować położenie katalogu bin do PATH.

Mam nadzieję, że to ci pomoże!

Swapnil Kamat
źródło
Tak, masz bardzo rację. Tak wiele badań pokazało mi, że zmienna ścieżki może mieć tylko 2048 znaków, a kiedy postacie dotrą do tego etapu, zmienna ścieżki nie będzie już mogła zajmować dużo znaków. Więc wypróbowałem to, co zasugerowałeś i teraz jest dobrze. Dziękuję
olammy
Dziękuję Ci! To świetny pomysł @ rozwiązanie 1! Sam powinienem o tym pomyśleć ... :)
Dev-iL
2
To działa jak urok, dziękuję! Należy jednak zachować ostrożność podczas używania, setx PATHponieważ spowoduje to bezpośrednie rozwiązanie problemu, %NEWPATH%a wynikowy ciąg będzie ponownie zbyt długi ... Tak więc, stosując to podejście, należy używać tylko okna dialogowego, a nie wiersza poleceń
IceFire
1
@SwapnilKamat To nie do końca działa: używam miktex, jego pdflatexmusi być PATH, jeśli wstawię lokalizację pdflatexw NEWPATH, już pdflatexgo nie znaleziono ("polecenie pdflatexnie jest rozpoznawane" ...)
Olorin
7
Jak na ironię, Microsoft SQL Server ustawił tak wiele zmiennych ścieżki, że sam prawie wypełnia przestrzeń. Utworzyłem zmienną PATHS_MSSQL, a następnie dodałem% PATHS_MSSQL% do zmiennej PATH, aby ją zastąpić. Zwolniono dużo miejsca w zmiennej PATH.
Steve Lloyd
49

Istnieje kilka sposobów na wyczyszczenie zmiennej ścieżki. Najłatwiej jest użyć Rapid Environment Editor . To bezpłatne narzędzie

  1. Usuń zduplikowane ścieżki (kliknij prawym przyciskiem myszy> Oczyść ścieżki)
  2. Usuń nieistniejące foldery (pokazane na czerwono, które należy usunąć ręcznie)
  3. Zastąp długie ścieżki krótkimi ścieżkami (prawy przycisk myszy> długa do krótkiej ścieżki).

Wykonuję powyższe kroki w kolejności i używam trzeciego kroku tylko dla najdłuższych ścieżek, dopóki rozmiar zmiennej ścieżki nie będzie ponownie kontrolowany.

Jeśli chcesz przejść bardziej zaawansowane, oto małe narzędzie C # , które możesz zmodyfikować do dowolnej innej logiki, którą chcesz zaimplementować.

Shital Shah
źródło
Przed przeczytaniem tego posta nigdy nie słyszałem o żadnym narzędziu, ale cieszę się, że tak! Dzięki za udostępnienie!
James Shaw
2
To narzędzie jest niesamowite! MS powinien uczynić go oficjalnym edytorem dostarczanym z oknami!
burzum
35

Innym lub większym sposobem obejścia limitu zmiennej długości ścieżki środowiska PATH jest zarządzanie ścieżką (dodawanie, usuwanie lub aktualizowanie) za pomocą PowerShellskryptu;

  1. Przechwyć bieżącą zmienną PATH, klikając „Edytuj tekst” (patrz powyższy zrzut ekranu) i skopiuj ją do schowka i zapisz w pliku tekstowym jako kopię zapasową, aby uniknąć przykrych niespodzianek. Nie jest to obowiązkowe, ale pozwoli Ci odzyskać sprawność, jeśli coś pójdzie nie tak.

  2. Po utworzeniu kopii zapasowej dodaj następujące elementy do nowego pliku programu PowerShell (.ps1) (zmieniając pierwszy wiersz poniżej ze ścieżkami folderów, które chcesz dodać (część po znaku +):

    $ newPath = $ env: Path + '; C: \ Users .... \ FirstFolderToAddToPath; C: \ Users .... \ SecondFolderToAddToPath; '

    [Środowisko] :: SetEnvironmentVariable ("Path", $ newPath, "Machine")

    $ env: Path = $ newPath

W ten sposób udało mi się odzyskać moją (długą) zmienną PATH po zabawie z interfejsem użytkownika systemu Windows 10, będąc złapanym przez ograniczenie długości i tracąc większość mojej ścieżki. Mam nadzieję, że to pomoże.

Sifou13
źródło
Dzięki… To było łatwe. Ciekawe, jaka jest różnica między przypisywaniem wartości w linii 2 i 3
Nayak
Linia 3 ustawia to w bieżącej sesji, linia 2 ustawia ją jako domyślną maszynę.
Tetsujin no Oni
2
PS działa dla dłuższej ścieżki, ale tradycyjne setx /mobcina do 1048 znaków :(. Możesz także edytować ścieżkę w edytorze tekstu i po prostu zrób to [Environment]::SetEnvironmentVariable("Path", '\my\new;path1', "Machine"). Będziesz potrzebować powłoki administratora.
Shital Shah
Jest to możliwe przy użyciu PS, ale nie przy użyciu GUI. Hm, jak to ma sens? Zagłosowano za, dzięki!
Legends
10

Oprócz odpowiedzi Swapnil, zwróć uwagę, że możesz zmodyfikować maksymalną długość zmiennej Path - która w innym przypadku jest ograniczona do 2048 znaków (podczas gdy pojedyncza ścieżka ma historyczny limit 206 znaków). W systemie Windows 10 można to osiągnąć, ustawiając LongPathsEnabledklucz rejestru na 1, który można znaleźć tutaj:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem

Aby uzyskać dostęp do edytora rejestru: Windows Key+Rwpisz Regedit.

Źródło: https://superuser.com/a/1119980

Spójrz również na tę odpowiedź SuperUser: https://superuser.com/a/1119980/327009

Uwzględniając poniższy komentarz: błąd „Zmienna środowiskowa jest za duża” dotyczy całej zmiennej, a nie tylko dodawanej pojedynczej ścieżki.

alexlomba87
źródło
19
Czy to trafna rada? Maksymalna długość zmiennej PATH (tj. Konkatenacji wielu ścieżek ) to 2048 znaków. 260 znaków, o których wspomniałeś, to maksymalna długość jednej ścieżki . Są spokrewnieni, ale nie to samo.
Hendy Irawan
7

Późna odpowiedź, ale szukałem czegoś podobnego i znalazłem się tutaj. Zmieniłem wszystkie ścieżki do zmiennych dla plików programu i danych programu (ten zapisuje jak 1 znak, choć nie jest tak ważny).

W przypadku czegoś takiego jak nodejs, zmieniłem normalną ścieżkę

C: \ Pliki programów \ nodejs \

do

% ProgramFiles% \ nodejs \

Można to zrobić za pomocą „C: \ Program Files (x86) \”, a także za pomocą „% ProgramFiles (x86)% \”

Uratowało mi to kilka postaci, ale na tyle, że przestało narzekać.

Bryan
źródło
7
Dlaczego po prostu nie użyć% x86% do zastąpienia „C: \ Program Files (x86)” i% x64% do zastąpienia „C: \ Program Files”, wydaje się, że jest to znacznie lepszy sposób na zmniejszenie ilości znaków.
Xorcist
1
@Xorcist - niezły! Nie miałem o tym pojęcia
mark1234
Myślę, że nie istnieją one domyślnie, ale możesz je stworzyć samodzielnie.
Gabriel Fair
też to zrobiłem, utworzyłem% PF% dla "c: \ Program FIles" i użycie go około 20 razy pozwoliło mi wystarczająco skrócić ścieżkę.
LaBracca
@Xorcist, jak to się robi, tworząc kolejną zmienną?
Demodave
5

Odkryłem, że możesz to zrobić za pomocą PowerShell.

[System.Environment]::SetEnvironmentVariable("PATH", "C:\Program Files (x86......etc.....", "Machine")

Więc złapałem istniejącą ścieżkę systemową PATH, wkleiłem do notatnika, dodałem nową rzecz, a następnie wkleiłem do fragmentu „C: \ Program Files” powyższego. Zaktualizowano ścieżkę. Gotowe.

BYĆ
źródło
4

Spróbuj zmodyfikować regedit, w moim przypadku działa, gdy długość przekracza 3000.

Naciśnij Win + Ri wprowadź, regeditaby otworzyć regedit. Idź do Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environmenti zmień wartość Pathswojej ścieżki. I uruchom ponownie komputer, powinno działać.

yu yang Jian
źródło
1
To działa dobrze dla mnie. Myślę, że jest to łatwe niż inne metody.
shalitha senanayaka
1

Obejście:

Uruchom ponownie system. Po ponownym uruchomieniu systemu ścieżka PATH nie jest już pusta, ale może zostać skrócona do 2047 (4095) znaków.Jeśli ponowne uruchomienie systemu nie pomoże:

Uruchom c: \ windows \ system32 \ regedit.exe Przejdź do gałęzi rejestru „HKLM \ SYSTEM \ CurrentControlSet \ Control \ Menedżer sesji \ Środowisko” Wyczyść niepotrzebne katalogi z klucza „Ścieżka” Uruchom ponownie system

Uwaga: W wyjątkowych przypadkach, gdy system nie może się uruchomić, należy:

Zaloguj się w trybie awaryjnym Otwórz powłokę wiersza poleceń i wpisz: reg dodaj „HKLM \ SYSTEM \ CurrentControlSet \ Control \ Session Manager \ Environment” / v Path / t REG_EXPAND_SZ / d ^% SystemRoot ^% \ system32; ^% SystemRoot ^% /fa

Więcej informacji: https://software.intel.com/en-us/articles/limitation-to-the-length-of-the-system-path-variable

LeoZ
źródło
Jak podnieść limit przynajmniej do 4095?
Dan M.
0

Najwyraźniej Rapid Environment Editor zrobi to za Ciebie (z odpowiedzi @shatil_shah), ale możesz też skrócić ścieżki do ich wersji „8dot3”. Dzięki tym dwóm zamiennikom uzyskasz duży przebieg:

C:\Program Files       --> C:\PROGRA~1
C:\Program Files (x86) --> C:\PROGRA~2

Jeśli skopiujesz bieżącą ścieżkę do Notatnika, najpierw wyszukaj i zamień, C:\Program Files (x86)a następnie C:\Progam Files.

bfris
źródło
-3

Obejście problemu. Użyj opcji Edytuj tekst i edytuj swoją ścieżkę w edytorze tekstu

Christoph Adamakis
źródło
2
Próbuję postępować zgodnie z twoją radą. W jakim pliku zmienne środowiskowe są przechowywane na moim komputerze?
Gabriel Fair
to tylko tekst. Otwórz go za pomocą notatnika
Christoph Adamakis
@GabrielFair Edit TextZamiast otwierać jakiś plik, trzeba było kliknąć przycisk o nazwie .
AlexMelw