Problemas com a configuração de variáveis ​​de ambiente (especialmente PATH) e o uso de cd com elas no cmd no Windows 10

Problemas com a configuração de variáveis ​​de ambiente (especialmente PATH) e o uso de cd com elas no cmd no Windows 10

Estou seguindo umtutorialpara configurar o Apache Storm. (Isso é apenas para fins de contexto - realmente não importa para o meu erro.)

Então me diz para definir algumas variáveis ​​de ambiente, especificamente %JAVA_HOME%and %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 procurei como fazer isso e executei:

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.

Então o tutorial diz para adicionar %STORM_HOME%\bin;%JAVA_HOME%\bin;C:\Python27;C:\Python27\Lib\site-packages\;C:\Python27\Scripts\;ao PATH. Entrei C:\>PATHpara 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 pensei que poderia acrescentar algo fazendo

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 ligar setxe PATHconfigurei como está atualmente e com as coisas que o tutorial diz anexadas ao final. Deu SUCCESS: Specified value was saved.Porém, quando entro:

C:\>PATH

ele retorna o que era originalmente (as coisas que 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 entrei, C:\>PATHele 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 que The system cannot find the path specified.tentei reiniciar meu computador, mas PATHfui reiniciado e ainda recebi o mesmo erro.

Responder1

@DavidPostill está correto, mas na verdade 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 em todo o sistema), você está alterando os valores do registro que determinam as variáveis ​​de ambiente para processos futuros.Na verdade, você não está alterando nenhuma variável de ambiente noatualprocesso em tudo!

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 mais 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 setcomando). A melhor maneira de fazer isso é usar setprimeiro e depois invocar setxusando as variáveis ​​de ambiente atuais. Aqui está 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 fazer referência a uma. As setxlinhas acima são processadas como "Defina a variável de ambiente de usuário JAVA_HOME para o valor local atual deste processo de JAVA_HOME", o que é equivalente a dizer "Defina a variável de ambiente persistente JAVA_HOME como C:\JAVA\jdk1.8.0_60\" porque é para isso que %JAVA_HOME% se expande no Processo atual.

Responder2

Por que 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 setxsintaxe está errada:

  • Coloque aspas "no segundo parâmetro (o 'valor').

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

Você deveria 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]

Fonteconjuntox


Leitura adicional

  • Um índice AZ da linha de comando do Windows CMD- Uma excelente referência para todas as coisas relacionadas à linha cmd do Windows.
  • conjuntox- Defina variáveis ​​de ambiente permanentemente, SETX pode ser usado para definir variáveis ​​de ambiente para a máquina (HKLM) ou usuário conectado no momento (HKCU).

informação relacionada