O shell de comando escapa com o caractere ^
, portanto, o que você precisa é escapar dos caracteres %
da seguinte forma: ^%
. Tente isso como uma linha de comando de substituição:
setx PATH ^%JAVA_HOME^%\bin;"%PATH%" /m
Tenha cuidado, no entanto, onde %PATH%
está sendo expandido.
EDITAR
Acho que essa é uma maneira mais segura de fazer isso. O primeiro pode ser colado em um prompt de comando:
FOR /F "usebackq skip=2 tokens=2,*" %i IN ('REG QUERY "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v Path') DO set origpath=%j
SET newpath=^%JAVA_HOME^%\bin;%origpath%
REG ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /f /v Path_ /t REG_EXPAND_SZ /d "%newpath%
E esta versão pode ser usada em um arquivo de lote:
FOR /F "usebackq skip=2 tokens=2,*" %%i IN ('REG QUERY "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v Path') DO set origpath=%%j
SET newpath=%%JAVA_HOME%%\bin;%origpath%
REG ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /f /v Path_ /t REG_EXPAND_SZ /d "%newpath%
Em ambos os casos, teste e tenha cuidado nos sistemas de produção. Eu acredito que tenho todos os funky fugindo correto, mas eu posso ter perdido alguma coisa. Observe também que a falta de "
no final de ambas as linhas 3 é intencional. Você também deve poder modificá-lo para rodar em sistemas remotos, prefixando \HOSTNAME\
na frente de HKEY_LOCAL_MACHINE
.