Como manter o valor de uma variável fora de um script em lotes do Windows que usa o modo “local de expansão atrasada”?

Contexto: Eu preciso chamar um script em lotes do Windows que atualizaria meuPATH adicionando outro caminho 'xxx'no final, mas:

sem qualquer duplicata
(se eu adicionar 'xxx'para um caminho como'aaa;xxx;bbb', Eu preciso de um atualizadoPATH gostar 'aaa;bbb;xxx')sem qualquer agregação
(Eu posso chamar o roteiro repetidamente sem acabar com 'aaa;bbb;xxx;xxx;xxx;...')

O que eu tentei:

A seguinte função cuida de qualquer duplicado e faz o trabalho

: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

Mas precisaexpansão atrasada modo local, o que significa: no final do script (ou aqui, no final da funçãocleanAddPath)tudo o que foi definido para%PATH% é jogado fora.

Eu poderia pedir aos usuários (para os quais eu escrevo o script) para lançar o seucmd com umcmd /V:ON opção (ativando a expansão atrasada, caso contrário, desativada por padrão), mas isso não é prático.

Como posso modificar oPATH variável da maneira que eu descrevi acima, e ainda tê-lo atualizado na minha sessão atual do DOSdepois de chamando dito roteiro?

questionAnswers(3)

yourAnswerToTheQuestion