1

Я следую инструкциям по настройке 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 получил сброс, и я все еще получил ту же ошибку.

2 ответа2

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% расширяется в текущем процессе.

0

Почему SETX не обновил мой путь

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\ сайт-пакеты \; 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 - постоянная установка переменных среды, SETX может использоваться для установки переменных среды для машины (HKLM) или для пользователя, вошедшего в систему (HKCU).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .