Jak zachować wartość zmiennej poza skryptem wsadowym Windows, który korzysta z trybu „opóźnionego rozszerzenia lokalnego”?
Kontekst: Muszę wywołać skrypt wsadowy systemu Windows, który zaktualizowałby mójPATH
dodając inną ścieżkę ”xxx
„na końcu, ale:
(jeśli dodam ”
xxx
„do PATH jak”aaa;xxx;bbb
„Potrzebuję aktualizacjiPATH
lubić 'aaa;bbb;xxx
”)bez jakiejkolwiek agregacji(Mogę wielokrotnie dzwonić do skryptu, nie kończąc na „
aaa;bbb;xxx;xxx;xxx;...
”)Co próbowałem:
Następująca funkcja zajmuje się każdym duplikatem i wykonuje zadanie
:cleanAddPath -- remove %~1 from PATH, add it at the end of PATH
SETLOCAL ENABLEDELAYEDEXPANSION
set PATH=!PATH:%~2=!
set PATH=!PATH:;;=;!
set PATH=%PATH%;%~2
set P=!P:;;=;!
echo %PATH%
echo -------------
ENDLOCAL
exit /b
Ale potrzebujeopóźniona ekspansja tryb lokalny, co oznacza: na końcu skryptu (lub tutaj, na końcu funkcjicleanAddPath
),cokolwiek zostało ustawione%PATH%
jest wyrzucony.
Mogę poprosić użytkowników (dla których piszę skrypt) o uruchomienie ichcmd
zcmd /V:ON
opcja (aktywacja opóźnionego rozszerzenia, w przeciwnym razie domyślnie wyłączona), ale nie jest to praktyczne.
Jak mogę zmodyfikowaćPATH
zmienna tak, jak opisałem powyżej, i wciąż ją aktualizuję w mojej obecnej sesji DOSpo dzwonisz do tego skryptu?