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:
(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?