@DavidPostill está correto, mas não resolve o seu problema. A resposta real é muito mais simples: o Prompt de Comando, como qualquer programa, recebe sua variável de ambiente na inicialização. Ao definir uma variável de ambiente persistente (por usuário ou por todo o sistema), você está alterando os valores do registro que determinam as variáveis de ambiente para processos futuros. Você não está realmente alterando nenhuma variável de ambiente no processo atual !
Na documentação de ajuda do SETX ( setx /?
):
2) On a local system, variables created or modified by this tool will be available in future command windows but not in the current CMD.exe command window.
Existem duas maneiras de resolver isso. O simples é, como indica a documentação, iniciar uma nova instância do CMD. Isso é bastante fácil, mas você não terá seu histórico de comandos, etc. O mais complicado é definir as variáveis de ambiente locais (use o comando set
). A melhor maneira de fazer isso é usar set
primeiro e invocar setx
usando as variáveis de ambiente atuais. Veja um exemplo do que você está fazendo acima:
REM Set the local version of JAVA_HOME
set JAVA_HOME=C:\JAVA\jdk1.8.0_60\
REM Set the local version of STORM_HOME
set STORM_HOME=C:\storm-0.9.1-incubating-SNAPSHOT-12182013\
REM Append the new values to PATH
set PATH=%PATH%;%STORM_HOME%\bin;%JAVA_HOME%\bin;C:\Python27;C:\Python27\Lib\site-packages\;C:\Python27\Scripts\;
REM Do whatever checks you want to do to confirm that those are set correctly
cd %STORM_HOME%
REM Now, save the current (local) values of the environment variables
REM to persistent storage (registry)
setx JAVA_HOME %JAVA_HOME%
setx STORM_HOME %STORM_HOME%
setx PATH %PATH%
Observe o uso de caracteres %
. Você os usa quando expande uma variável de ambiente, não quando deseja se referir a uma. As linhas setx
acima são processadas como "Configure a variável de ambiente do usuário JAVA_HOME para este processo 'valor local atual de JAVA_HOME", o que equivale a dizer "Configurar a variável de ambiente persistente JAVA_HOME como C:\JAVA\jdk1.8.0_60\
" porque é isso que% JAVA_HOME% se expande no processo atual.