Ustawianie zmiennych środowiskowych i dołączanie do całego systemu% PATH% za pomocą pliku wsadowego systemu Windows

1

Próbuję ustawić trzy zmienne środowiskowe i dodać je do ścieżki komputera. W tej chwili mój kod wygląda następująco:

setx CATALINA_HOME "C:\Program Files (x86)\Apache Software Foundation\Tomcat 7" /m
setx JRE_HOME "C:\Program Files (x86)\Java\jre7" /m
setx JAVA_HOME "C:\Program Files (x86)\Java\jdk1.7.0_21" /m
setx PATH "%PATH%;%JAVA_HOME%\bin;%JRE_HOME%\bin;%CATALINA_HOME%\BIN;" /m

Pierwsze trzy, gdy są uruchamiane samodzielnie, działają dobrze do dodawania zmiennej. Jednak ostatni wiersz powoduje usunięcie części oryginalnej ścieżki i brak dodatkowych zmiennych.

Moim pożądanym rezultatem byłoby dodanie trzech zmiennych i podanie całej ścieżki systemu

[original path];%JAVA_HOME%\bin;%JRE_HOME%\bin;%CATALINA_HOME%\BIN;
user2596774
źródło

Odpowiedzi:

1

Częścią twojego problemu jest to SETX nie jest SET –– po wykonaniu

setx JAVA_HOME "C:\Program Files (x86)\Java\jdk1.7.0_21" /m

…, %JAVA_HOME% nie jest ustawiony w tej instancji wiersza polecenia. Aby rozpocząć, musisz uruchomić nową instancję %JAVA_HOME%, et. al., ustaw. Proponuję zrobić coś takiego

set  JAVA_HOME=C:\Program Files (x86)\Java\jdk1.7.0_21
setx JAVA_HOME "%JAVA_HOME%" /m

Nie rozumiem, dlaczego usuwałbyś część oryginalnej ścieżki. Uzyskaj dostęp / zmodyfikuj zmienną ścieżki użytkownika, a nie ścieżkę systemową może być istotne. I może chcesz to zrobić

reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v path

aby uzyskać część systemową zmiennej PATH, z wyłączeniem części użytkownika.

Scott
źródło
HKCU Środowisko dla użytkowników vars. i HKLM SYSTEM CurrentControlSet Kontrola Menedżer sesji Środowisko dla systemu.vars. PATH łączy je / łączy
barlop
@barlop: Nie rozumiem, co mówisz.
Scott
nie zaprzeczam temu, co mówisz. I mówię, że jeśli wpiszesz PATH & lt; ENTER & gt; zobaczysz, że najpierw wyświetla ścieżkę systemu, a następnie ścieżkę użytkownika. tj. zawartość zmiennej PATH składa się zarówno z wpisu rejestru dla ścieżki system / komputer, jak i wpisu rejestru dla ścieżki użytkownika. Na przykład pierwszy wpis% PATH% jest pierwszym w ścieżce systemowej, a ostatni wpis jest ostatnim w ścieżce użytkownika. ponieważ jeśli konkatenuje (łączy) wartości z dwóch pozycji, najpierw ścieżka systemowa, a potem ścieżka użytkownika.
barlop
DOBRZE; Zakładałem, że OP już to wiedział, z faktu, że pytanie wspomina „systemowy% PATH%”, „ścieżka maszynowa” i „ścieżka ogólnosystemowa”, a on już używał /m opcja do setx.
Scott
Nie znał wpisu rejestru, dlatego o tym wspomniałeś. Chodzi mi o to, że jeśli zamierzasz edukować kogoś o tym, gdzie jest to warte, dla odniesienia, wspominając również o tym, gdzie znajduje się wpis ścieżki użytkownika. Wtedy może naprawdę zrozumieć, jak coś może być w jednym, a nie w drugim. W rzeczywistości bez wątpienia musiałbyś sprawdzić wpis rejestru ścieżki systemowej (ponieważ jest dość długi), a większość źródeł informacji, które go wyświetlają, jest na tyle pomocna, aby wymienić użytkownika także. A posiadanie obu jest użyteczne dla każdego, kto chciałby je odwołać lub jeśli nie wie, aby pomóc im zrozumieć.
barlop
0

Jeśli używasz% var%, jest on rozwijany podczas użycia. Jeśli chcesz ustawić zmienną tak, aby zawierała% var%, musisz napisać %% var %%.

Zauważ również, że ustawienia rejestru nie są widoczne w bieżącym procesie, ale są postrzegane tylko przez nowe procesy. W winpe te ustawienia w rejestrze nigdy nie są przekazywane do nowych procesów, ale środowisko cmd pobiera środowisko eksploratora, a nie rejestr. Z tego powodu ludzie napisali narzędzia, które dostosowują różne środowiska.

Jeśli chcesz odczytać rejestr do bieżącej sesji cmd, możesz potrzebować conset.exe Franka Westlake'a.

wendy.krieger
źródło
0

Odkryłem, że umieszczenie /M przełącz wcześnie wykonuje sztuczkę, nawet jeśli chcą, aby umieścić go na końcu.

Na przykład to działa:

setx /M PATH "%PATH%;C:\AddYourPathHere"

Ale to nie:

setx PATH "%PATH%;C:\AddYourPathHere" /M
Catch22
źródło