Проблемы с настройкой переменных среды (особенно PATH) и использованием cd с ними в cmd в Windows 10

Проблемы с настройкой переменных среды (особенно PATH) и использованием cd с ними в cmd в Windows 10

Я следую заруководстводля настройки Apache Storm. (Это просто для контекста — в случае моей ошибки это не имеет значения.)

Итак, он говорит мне установить некоторые переменные среды, в частности %JAVA_HOME%и %STORM_HOME%как C:\Java\jdk1.8.0_60\и C:\storm-0.9.1-incubating-SNAPSHOT-12182013\, соответственно. Я никогда раньше не делал ничего подобного, поэтому я посмотрел, как это сделать, и запустил:

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

и это дало:SUCCESS: Specified value was saved.

Затем я сделал:

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

и он дал то же самое:SUCCESS: Specified value was saved.

Затем в руководстве говорится, что нужно добавить %STORM_HOME%\bin;%JAVA_HOME%\bin;C:\Python27;C:\Python27\Lib\site-packages\;C:\Python27\Scripts\;к PATH. Я ввел его C:\>PATH, чтобы посмотреть, что там сейчас есть, и он выдал:

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

Поэтому я подумал, что могу сделать что-то еще, сделав

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\; 

Другими словами, я просто попробовал позвонить setxи PATHустановил его на то, что есть сейчас, и добавил в конец то, что говорит учебник. Это дало SUCCESS: Specified value was saved.Однако, когда я ввожу:

C:\>PATH

он возвращает то, что было изначально (то, что я пытался добавить, там не было). Я попробовал другой метод. Я запустил

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

Затем, когда я вошел, C:\>PATHон вернул полный путь PATH с тем, что я хотел добавить.

Проблема, с которой я сейчас сталкиваюсь, заключается в использовании этих переменных. Когда я ввожу

C:\>cd %STORM_HOME%

там написано, что The system cannot find the path specified.я пытался перезагрузить компьютер, но PATHнастройки были сброшены, и я все еще получаю ту же ошибку.

решение1

@DavidPostill прав, но на самом деле не решает вашу проблему. Фактический ответ гораздо проще: командная строка, как и любая программа, получает свою переменную среды при запуске. Когда вы устанавливаете постоянную переменную среды (как для пользователя, так и для всей системы), вы изменяете значения реестра, которые определяют переменные среды для будущих процессов.На самом деле вы не меняете никаких переменных среды втекущийпроцесс вообще!

Из справочной документации 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.

Есть два способа решения этой проблемы. Самый простой, как указано в документации, — запустить новый экземпляр CMD. Это достаточно просто, но тогда у вас не будет истории команд и т. д. Более сложный — установить локальные переменные окружения (использовать команду set). Лучший способ сделать это — сначала использовать set, а затем вызвать setxс использованием текущих переменных окружения. Вот пример того, что вы делаете выше:

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%

Обратите внимание на использование %символов. Вы используете их, когда расширяете переменную среды, а не когда хотите сослаться на нее. Строки setxвыше обрабатываются как "Установить пользовательскую переменную среды JAVA_HOME на текущее локальное значение JAVA_HOME этого процесса", что эквивалентно фразе "Установить постоянную переменную среды JAVA_HOME на C:\JAVA\jdk1.8.0_60\", потому что именно в это значение %JAVA_HOME% расширяется в текущем процессе.

решение2

Почему SETX не обновил мой 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\;

Ваш setxсинтаксис неверен:

  • Заключите "в кавычки второй параметр («значение»).

    Второй параметр следует заключать в кавычки, если он содержит пробелы, а %PATH%пробелы содержатся почти всегда.

Вам следует использовать:

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

Или:

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

Синтаксис

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]

Источниксеткс


Дальнейшее чтение

  • Индекс AZ командной строки Windows CMD- Отличный справочник по всем вопросам, связанным с командной строкой Windows.
  • сеткс- Установите постоянные переменные среды, SETX можно использовать для установки переменных среды для машины (HKLM) или текущего вошедшего в систему пользователя (HKCU).

Связанный контент