2011-08-17 16 views
6

Mam plik wsadowy, który modyfikuje zmienną PATH przez dodanie kilku adresów. Gdy użytkownik się wyloguje, PATH zostaje zresetowany do pierwotnej wartości (przed uruchomieniem pliku wsadowego). To zachowanie jest w porządku.Windows CMD - Resetuj zmienną ścieżki z pliku wsadowego?

Jednakże, jeśli plik wsadowy jest uruchamiany więcej niż jeden raz, te same wartości są ponownie dodawane i kończę na zbyt długiej, nadmiarowej zmiennej PATH, która staje się dłuższa po każdym uruchomieniu wsadowym.

Chciałbym zresetować zmienną do tego, co jest, gdy użytkownik loguje się, zanim wartości są poprzedzone. Rozumiem, że rozwiązaniem jest zapisanie oryginalnej wartości w pliku tymczasowym i odczytanie jej, ale czy jest lepszy sposób na zrobienie tego?

Odpowiedz

6

Zamiast pisać oryginalną wartość do pliku tymczasowego, można napisać go do innej zmiennej środowiskowej:

if not defined ORIGINAL-PATH set ORIGINAL-PATH=%PATH% 
set PATH=c:\extra\stuff;%ORIGINAL-PATH% 

ale byłoby lepiej, aby jednoznacznie sprawdzić, czy ciąg chcesz jest w PATH już lub nie , tak:

echo %PATH% | findstr /c:"c:\extra\stuff;" > nul || set PATH=c:\extra\stuff;%PATH% 
+0

Tak właśnie zrobiłem. Dzięki! – Ben

+0

To ma dodatkową zaletę, jeśli zepsujesz "dodatkowe rzeczy" ... możesz to naprawić. Zapomniałem o końcu "\", kiedy to zrobiłem pierwszy raz. Dzięki za prostą, ale skuteczną wskazówkę! – granadaCoder

6

Umieść @SETLOCAL u góry pliku wsadowego.

Wszelkie zmiany wprowadzone w środowisku zostaną przywrócone po wyjściu pliku wsadowego.

Uruchom setlocal /?, aby uzyskać więcej informacji.

1

Szukam rozwiązania przez długi czas dla podobnego problemu. W końcu skończyło się używając pathmgr.cmd które mam pobrać ze strony:

http://gallery.technet.microsoft.com/Batch-Script-To-Manage-7d0ef21e

go używać do czyszczenia ścieżki użytkownika, poniższe opcje mogą być używane z linii poleceń:

pathmgr.cmd/clean/user/p/y

Dostępnych jest również wiele innych użytecznych opcji.

Powiązane problemy