Problemas com a configuração de variáveis de ambiente (especialmente PATH) e usando o cd com eles em cmd no windows 10

1

Estou seguindo um tutorial para configurar o Apache Tempestade. (Isso é apenas para o contexto - não importa realmente para o meu erro.)

Por isso, ele me diz para definir algumas variáveis de ambiente, especificamente %JAVA_HOME% e %STORM_HOME% as C:\Java\jdk1.8.0_60\ e C:\storm-0.9.1-incubating-SNAPSHOT-12182013\ , respectivamente. Eu nunca fiz esse tipo de coisa antes, então eu procurei como fazer isso e eu corri:

C:\>setx %JAVA_HOME% C:\JAVA\jdk1.8.0_60\

e deu: SUCCESS: Specified value was saved.

Então eu fiz:

C:\>setx %STORM_HOME% C:\storm-0.9.1-incubating-SNAPSHOT-12182013\

e deu a mesma coisa: SUCCESS: Specified value was saved.

Em seguida, o tutorial diz para adicionar %STORM_HOME%\bin;%JAVA_HOME%\bin;C:\Python27;C:\Python27\Lib\site-packages\;C:\Python27\Scripts\; a PATH . Eu digitei C:\>PATH para ver o que é atualmente e deu:

PATH=C:\ProgramData\Oracle\Java\javapath;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\

Então, achei que poderia adicionar isso ao fazer

C:\>setx PATH C:\ProgramData\Oracle\Java\javapath;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;%STORM_HOME%\bin;%JAVA_HOME%\bin;C:\Python27;C:\Python27\Lib\site-packages\;C:\Python27\Scripts\; 

Em outras palavras, tentei chamar setx on PATH e defini-a para o que é atualmente e com as coisas que o tutorial diz ao final. Ele deu SUCCESS: Specified value was saved. No entanto, quando eu digito:

C:\>PATH

retorna o que era originalmente (as coisas que eu tentei anexar não estão lá). Eu tentei outro método. Eu corri

C:\>PATH=%PATH%;%STORM_HOME%\bin;%JAVA_HOME%\bin;C:\Python27;C:\Python27\Lib\site-packages\;C:\Python27\Scripts\;

Então, quando eu digitei C:\>PATH , ele retornou o PATH completo com o material que eu queria anexar.

O problema que enfrento agora é usar essas variáveis. Quando eu entro

C:\>cd %STORM_HOME%

diz The system cannot find the path specified. Tentei reiniciar meu computador, mas PATH foi redefinido e ainda recebo o mesmo erro.

    
por Drew 18.09.2015 / 20:43

2 respostas

1

@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.

    
por 18.09.2015 / 23:33
0

Por que o SETX não atualizou meu PATH

setx PATH C:\ProgramData\Oracle\Java\javapath;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;%STORM_HOME%\bin;%JAVA_HOME%\bin;C:\Python27;C:\Python27\Lib\site-packages\;C:\Python27\Scripts\;

Sua sintaxe setx está errada:

  • Coloque as aspas " em torno do segundo parâmetro (o 'valor').

    O segundo parâmetro deve ser citado se contiver espaços e %PATH% quase sempre contém espaços.

Você deve estar usando:

setx PATH "%PATH%;%STORM_HOME%\bin;%JAVA_HOME%\bin"

Ou:

setx PATH "%STORM_HOME%\bin;%JAVA_HOME%\bin;%PATH%"

Sintaxe

SETX [/s Computer [Credentials]] Variable Value [/m]

SETX [/s Computer [Credentials]] [Variable] /k RegistryPath [/m]

SETX [/s Computer [Credentials]] /f FileName {[Variable] {/a L,T | /r oL,oT "SearchString"} [/m] | /x} [/d Delimiters]

Fonte setx

Leitura Adicional

  • Um índice A-Z da linha de comando do Windows CMD - Uma excelente referência para todas as coisas relacionadas à linha do Windows cmd.
  • setx - Defina as variáveis de ambiente permanentemente, SETX pode ser usado para definir as variáveis de ambiente para a máquina (HKLM) ou usuário atualmente conectado (HKCU).
por 18.09.2015 / 20:56