%20e%20o%20uso%20de%20cd%20com%20elas%20no%20cmd%20no%20Windows%2010.png)
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:\>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 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 setx
e PATH
configurei 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:\>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 que The system cannot find the path specified.
tentei reiniciar meu computador, mas PATH
fui 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 set
comando). A melhor maneira de fazer isso é usar set
primeiro e depois invocar setx
usando 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 setx
linhas 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 setx
sintaxe 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).