Почему Windows не может обработать переменную среды в Пути?

У моего коллеги и меня есть идентичные рабочие станции Dell с установленным выпуском Windows XP Professional x64.

Моя переменная среды Пути запускается с:

%JAVA_HOME%\bin;...

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

Если я получаю доступ к системным свойствам-> переменные среды и изменяю значение моей переменной JAVA_HOME, версию Java, найденного от изменений командной строки, как я ожидаю. Это запускает совершенно новую консоль, чтобы убедиться взять изменения.

Но на машине моего коллеги, это не делает. Он продолжает находить свою предыдущую версию Java, пока он не поднимает свою переменную Пути и сохраняет ее (даже если он не вносит изменений в нее). (Снова, это при запуске совершенно новой консоли.)

Я наблюдал это несоответствие относительно Windows в течение приблизительно 6 месяцев теперь и очень любопытный на предмет этого. Мы имеем слишком много версий Windows в нашем офисе, так редко имеем, у меня был шанс видеть этот случай на двух машинах, выполняющих ту же самую версию ОС, до сих пор.

Что вызывает это? Почему его машина не переоценивает Путь, с помощью нового JAVA_HOME, когда моя делает?

(Это, потому что это не первая вещь в Пути? Если так, как это могло быть, и почему? Я сделал бы больше тестов для проверки, но я думаю, что он теперь сыт по горло им и хотел бы возвратиться к работе.)

44
задан 21.08.2009, 21:12

5 ответов

я спросил это относительно форумов Microsoft в марте 2009 и никогда не разрешал его:

Как использовать %ProgramFiles % в переменной среды Пути?:


Я пытаюсь добавить папку к переменной среды Пути системы.

я хочу добавить %ProgramFiles %\SysInternals

к существующей переменной пути:

C:\PROGRA~1\Borland\Delphi5\Projects\Bpl; C:\PROGRA~1\Borland\Delphi5\Bin; %SystemRoot %\system32; % %SystemRoot; % SystemRoot %\System32\Wbem; C:\Program Files\Microsoft SQL Server\80\Tools\BINN; C:\Program Files\Microsoft SQL Server\80\Tools\Binn\; C:\Program Files\Microsoft SQL Server\90\Tools\binn\; C:\Program Files\Microsoft SQL Server\90\DTS\Binn\; C:\Program Files\Microsoft SQL Server\90\Tools\Binn\VSShell\Common7\IDE\; C:\Program Files\Microsoft Visual Studio 8\Common7\IDE\PrivateAssemblies\; %SYSTEMROOT %\System32\WindowsPowerShell\v1.0\

Таким образом, я вхожу в место, где Вы редактируете его:

alt text

И я добавляю свою переменную к пути:

%ProgramFiles %\SysInternals; C:\PROGRA~1\Borland\Delphi5\Projects\Bpl; (надрез)

Затем открывая новое окно командной строки переменная среды не заменяется, он - фактическое значение:

Путь = % ProgramFiles %\SysInternals; C:\PROGRA~1\Borland\Delphi5\Projects\Bpl (надрез)>

Который Вы видите в следующем снимке экрана:

alt text


Но отвечать на Ваш вопрос:я не знаю. кажется, что это не может быть сделано.

7
ответ дан 07.12.2019, 08:38

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

5
ответ дан 07.12.2019, 08:38

Это могло бы быть связано с "отложенной функцией" расширения переменной среды (или отсутствие этого), или возможно можно использовать в своих интересах эту функцию, чтобы всегда иметь правильное решение.

от подсказки cmd

set /? 

и считайте раздел, описывающий "задержанное расширение переменной среды", которое включает небольшой пример для тестирования

set VAR=before
if "%VAR%" == "before" (
    set VAR=after
    if "%VAR%" == "after" @echo If you see this, it worked
)

Если Вы не получаете строку эха, то это могло бы объяснить это...

Если, однако, Вы запускаете свой cmd.exe с/V опции, то можно использовать"!" вместо "%", который изменяет behaivior

set VAR=before
if "%VAR%" == "before" (
    set VAR=after
    if "!VAR!" == "after" @echo If you see this, it worked
)

Для меня (работающий на XP), не работал 1-й сценарий, но вторая версия сделала (с cmd.exe/V)

1
ответ дан 07.12.2019, 08:38

Возможно, Вы делаете его неправильно?

Я попробовал Windows XP Pro SP3 (32 бита). У меня действительно есть путь с несколькими случаями %JAVA_HOME%%JAVAFX_HOME%, и т.д.). Я перехожу к командной строке, ввожу PATH, Я вижу расширенные переменные. Хороший.

Я изменяю значение JAVA_HOME. Назад к тому же окну командной строки, PATH снова, то же значение... как ожидалось (по опыту!).

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

Не уверенный, что является точным механизмом там, но кажется, что любая запускающая программа, включая cmd.exe, получает значения переменных среды во время начала, и не оглядывается назад... (хотя я полагаю, что польза вела себя, программа может прислушаться к огибающим изменениям, не слишком уверенным хотя).

Это могло бы рассматриваться как функция или ошибка или раздражение, но это - способ, которым это работает. Эй, по крайней мере, в отличие от времен Win9X, мы не должны перезагружать компьютер! И в отличие от времен NT (IIRC), Вы не должны выходить из системы и назад.

Почему несоответствие? Способы Microsoft являются непостижимыми... :-P

0
ответ дан 07.12.2019, 08:38

У меня была та же проблема, и я знаю, как зафиксировать ее, ее Ламе.

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

Если это не работает, делают это еще несколько раз, так или иначе это просто разрешается.

1
ответ дан 07.12.2019, 08:38

Теги

Похожие вопросы