Evita que o setx expanda uma variável de ambiente?

3

Eu posso adicionar à variável PATH do console usando o seguinte comando:

setx PATH "%JAVA_HOME%\bin;%PATH%" /m

No entanto, quando eu verificar a variável PATH depois, a variável JAVA_HOME foi expandida para que o% realPATH pareça X:\Path\To\Java\bin;... em vez de %JAVA_HOME%\bin;... . Existe uma maneira de usar o setx como eu faço aqui sem ter a variável JAVA_HOME expandida?

Tentei usar o dobro %% , mas isso me deu a versão expandida com uma porcentagem em cada extremidade. Também tentei \% , mas isso apenas estragou tudo.

    
por Svish 22.04.2013 / 13:31

1 resposta

2

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 .

    
por 24.04.2013 / 04:52