Wiersz polecenia - jak dodać ścieżkę ustawioną tylko dla tego pliku wsadowego?

187

Zasadniczo wiem, że mogę przejść przez panel sterowania i zmodyfikować zmienną ścieżki. Ale zastanawiam się, czy istnieje sposób, aby poprzez programowanie wsadowe uwzględnić tymczasową ścieżkę? W ten sposób jest używany tylko podczas wykonywania pliku wsadowego. Nie chcę, aby ludzie wchodzili i modyfikowali swoje zmienne ścieżki tylko po to, aby użyć mojego pliku wsadowego.

Michael
źródło

Odpowiedzi:

318

Podobnie jak każda inna zmienna środowiskowa z SET:

SET PATH=%PATH%;c:\whatever\else

Jeśli chcesz mieć najpierw wbudowaną małą kontrolę bezpieczeństwa, sprawdź, czy nowa ścieżka istnieje najpierw:

IF EXIST c:\whatever\else SET PATH=%PATH%;c:\whatever\else

Jeśli chcesz, aby był lokalny dla tego pliku wsadowego, użyj setlocal:

setlocal
set PATH=...
set OTHERTHING=...

@REM Rest of your script

Przeczytaj uważnie dokumentację dla setlocal/ endlocali spójrz na inne odnośniki na tej stronie - Funkcje są również dość interesujące, a składnia trudna.

Strona Składnia powinna zacząć od podstaw.

Mata
źródło
3
Jeśli dodasz a setlocaldo pliku wsadowego, ścieżka będzie widoczna tylko w pliku
jeb
jak dodajesz „setlocal”? Czy to zamiast „SET”?
Michael
@micheal: zaktualizowałem moją odpowiedź o linki. Przeczytaj dokumentację / przykłady / tutoriale dotyczące skryptów cmd - SETto naprawdę coś, co powinieneś wiedzieć i zrozumieć, zanim zaczniesz pisać.
Mat
2
Oszczędzanie życia Musiałem dodać EV na serwerze, którego nie można zrestartować, a to pozwala mi robić to, czego potrzebuję bez konieczności ponownego uruchamiania!
dav_i
8
Nawet bez SETLOCALniego najwyżej będzie to dotyczyć tylko pojedynczej sesji wiersza polecenia - jeśli robisz to z więcej niż jednego pliku wsadowego i używasz EXIT /B %N%, SETLOCALto po prostu zrzucisz zmiany po wyjściu skryptu. : - /
BrainSlugs83
21

Jest ważny szczegół:

set PATH="C:\linutils;C:\wingit\bin;%PATH%"

nie działa, podczas gdy

set PATH=C:\linutils;C:\wingit\bin;%PATH%

Pracuje. Różnica polega na cytatach!

UPD zobacz także komentarz Venimusa

18446744073709551615
źródło
3
w rzeczywistości powinny być to, że SET "PATH=...%PATH%"spacje istniejące na ścieżce spowodują błędy lub niewłaściwe zachowanie. Zawijanie takich cytatów nie obejmuje ich, ale odpowiednio ustawia zmienną. To samo działa dla każdej innej zmiennej env.
venimus
20

Zgadza się, ale nie zmienia to na stałe, ale tylko dla bieżącego wiersza polecenia, jeśli chcesz go zmienić na stałe, musisz użyć na przykład:

setx ENV_VAR_NAME "DESIRED_PATH" /m

Spowoduje to zmianę na stałe i tak, możesz zastąpić go innym skryptem wsadowym.

głupi
źródło
Może /mmusi być po setx?
suzanshakya
Działa dla mnie tak samo, ale ten skrypt Win Batch Scripting to niewielka niedokończona sprawa od MS. W mojej firmie, w której mamy te same laptopy z tym samym systemem, nie ma uniwersalnego skryptu dla ustawienia PATH i utrzymujemy 2 lub 3 z nich, więc cokolwiek dla ciebie działa :)
dumbak
Dziękuję za aktualizację. W systemie Windows Server 2012, kiedy umieszczam /mna końcu, DESIRED_PATHzostał dodany z / m na końcu tylko dla bieżącego użytkownika.
suzanshakya
11
Słowo ostrzeżenia. Używając setx na ścieżce, próbując dodać do niego więcej, a łańcuch ma> 1024 długości, odkryłem, że wynik (moja ścieżka PATH) został obcięty na stałe. (Dobrze, że mogłem skopiować% PATH%, który ECHOedowałem przed zmianą, i odłożyć go z powrotem za pomocą narzędzia okien zmiennych zmiennych środowiskowych.)
Andreas Jansson,
Uwaga! To polecenie bezpośrednio zastępuje zmienną środowiska systemowego! Usunąłem je i spróbuj je naprawić. A także dla każdego, kto popełnił ten błąd: nie uruchamiaj ponownie komputera. Napisz, echo %path%a otrzymasz bieżącą załadowaną ścieżkę. Musisz odróżnić zmienne środowiskowe użytkownika i systemu od siebie. Następnie możesz ręcznie zastosować je w odpowiednim miejscu.
Alper,