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:

bez żadnego duplikatu
(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?

questionAnswers(3)

yourAnswerToTheQuestion