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.

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.


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


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.


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,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.