Windows가 Path에서 환경 변수를 처리 할 수없는 이유는 무엇입니까? 포함되어 있지만 Path의 첫

동료와 Windows XP Professional x64 에디션이 설치된 동일한 Dell 워크 스테이션이 있습니다.

내 경로 환경 변수는 다음으로 시작합니다.

%JAVA_HOME%\bin;...

동료의 Path 변수에는 동일한 환경 변수를 사용하여 지정된 동일한 디렉토리가 포함되어 있지만 Path의 첫 번째 항목은 아닙니다.

시스템 특성-> 환경 변수에 액세스하고 JAVA_HOME 변수 값을 변경하면 명령 행에서 찾은 java 버전이 예상대로 변경됩니다. 변경 사항을 적용하기 위해 새로운 콘솔 창이 시작됩니다.

그러나 내 동료의 컴퓨터에서는 그렇지 않습니다. 그는 Path 변수를 가져 와서 저장할 때까지 (이전의 Java 버전을 찾지 않아도) 이전 버전의 Java를 계속 찾습니다. (이것은 새로운 콘솔 창을 시작할 때입니다.)

나는 약 6 개월 동안 Windows 에서이 불일치를 관찰하고 그것에 대해 매우 궁금합니다. 우리 사무실에는 너무 많은 Windows 버전이 있으므로 지금까지 동일한 OS 버전을 실행하는 두 대의 컴퓨터에서 이런 일이 발생하는 것을 거의 볼 수 없었습니다.

이 원인은 무엇입니까? 내 컴퓨터가 새로운 JAVA_HOME을 사용하여 경로를 다시 평가하지 않는 이유는 무엇입니까?

(경로에서 첫 번째가 아니기 때문에? 그렇다면 어떻게 할 수 있으며 왜 그런가? 나는 더 많은 테스트를 해보고 싶지만, 그는 지금 그것에 지 쳤고 다시 일하고 싶다고 생각한다. .)



답변

경로는 시스템 경로와 사용자 경로의 연결입니다. 또한 시스템 환경 변수에는 사용자 환경 변수에 대한 참조가 포함 되지 않을 수 있으며 이러한 참조는 확장 되지 않습니다 . 원하는 결과를 얻으려면 사용자 환경 변수 PATH 에 % JAVA_HOME %에 대한 참조를 삽입 하거나 해당 변수가없는 경우 작성하십시오.

아마도 간단한 예가 이것을 더 명확하게 할 것입니다. SYSTEM 환경이

ProgramFiles = C:\Program Files
SystemRoot = C:\WINDOWS
PATH = %SystemRoot%\SYSTEM32

사용자 JSmith의 환경은

JAVA_HOME = %ProgramFiles%\Java\bin
USERPROFILE = C:\USERS\JSmith
PATH = %JAVA_HOME%\bin;%USERPROFILE%\bin

결과 경로는

C:\WINDOWS\SYSTEM32;C:\Program Files\Java\bin;C:\Users\JSmith\bin

바라는대로.


답변

이 키에서 Windows 레지스트리를 체크인하십시오.

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SessionManager\Environment

환경 변수를 확장해야하는 경우 (여기 : % JAVA_HOME %)

변수 REG_EXPAND_SZ 값 으로 설정 해야합니다 .

명령 줄을 통해 reg.exe를 사용하여 레지스트리 값을 추가 / 편집하는 경우 기본값은 REG_SZ입니다. reg add /t REG_EXPAND_SZ옵션 을 사용하여 REG_EXPAND_SZ 유형을 지정하십시오 .


답변

변수가 공백이 포함 된 경로로 확장 될 때 PATH 변수 내에서 환경 변수를 확장 할 때 명확한 문제가 있습니다.

“OUR_ROOT = c : \ MyRoot”와 같은 자체 시스템 수준 변수를 만든 다음 “PATH =; % OUR_ROOT % \ bin;”과 같은 시스템 PATH에서 사용했습니다. “PATH =; c : \ MyRoot \ bin;”으로 올바르게 확장됩니다. 지금까지 아무런 문제가 없습니다.

그러나 Windows 7 (32 비트)에서는 제품을 설치하고 다음과 같은 시스템 환경 변수를 만듭니다.

STUDIO_BIN=C:\program files\Company Name\Product Name 10.4\bin

그리고 시스템 PATH 변수에 추가했습니다.

PATH=<other path elements>;%STUDIO_BIN%;<more path elements>

그러나 CMD에 표시된 PATH 값에는 “% STUDIO_BIN %;”이 포함되어 있습니다. 확장 된 경로가 아닙니다. 내 컴퓨터> 속성> 고급> 환경 변수의 값은 확장되지 않은 상태로 유지되었습니다. 즉, 해당 디렉토리에서 DLL이 필요한 프로그램을 실행할 수 없습니다.

STUDIO_BIN을 내 컴퓨터> 속성> 고급 …> 환경 변수를 통해) 공백이없는 이름으로 변경하면됩니다.

STUDIO_BIN=C:\ProductName\bin

그런 다음 CMD 창을 다시 시작하면 PATH는 다음과 같습니다.

PATH=<other path elements>;C:\ProductName\bin;<more path elements>

또 다른 해결책은 내 컴퓨터> 속성> 고급 …> 환경 변수 대화 상자를 사용하여 PATH에서 사용중인 시스템 변수를 충분히 편집하는 것입니다. 문자를 추가하고 제거하여 ‘변경’을 한 다음 확인을 시도하고 새 CMD 프롬프트를 시작했으며 PATH가 올바르게 확장되지 않았습니다. 그런 다음 경로의 일부 를 삭제하려고 했습니다.

STUDIO_BIN=C:\Program Files\Company Name

( “Product Name 10.4″생략) 그리고 다음 CMD 프롬프트는 STUDIO_BIN이 올바르게 확장 된 PATH를 표시했습니다.

이상하게도, 돌아가서 “Product Name 10.4″를 STUDIO_BIN에 추가하면 (처음으로 그와 함께 뭉치기 시작하기 전에 있던 모든 공간 포함) PATH가 제대로 확장되었습니다.

분명히 내용이 충분히 변경되면 PATH 변수는 환경 변수 대화 상자에서 추가 처리를 거쳐 작동합니다. 제품의 설치 프로그램에서 변수를 추가했을 때 수행되지 않은 처리 (아마도 레지스트리에서 PATH를 직접 수정했을 수도 있음).

나는 이것이 XP에서도 문제라고 거의 긍정적입니다. 새로운 개발 시스템을 만들면서 Windows 7에서 다시 표면화되었습니다. 분명히 Microsoft에 의해 수정되지 않았습니다.

% ProgramFiles %와 같은 MS 정의 변수조차도 PATH에서 올바르게 확장되지 않습니다.

이 페이지 는 명령 줄 또는 배치 파일을 통해 PATH를 설정하는 경우 가능한 답변을 제공합니다. (SET 다음에 전체 명령을 따옴표로 묶으십시오.) 설치 한 제품이 환경 변수를 설정하는 데 사용한 설치 프로그램을 모르지만 공백으로 경로를 올바르게 확장하는 데 필요한 처리가 무엇인지 알 수 있습니다.

요약하자면 다음 중 하나를 수행 할 수 있습니다.

  • 공백이없는 경로로 경로를 변경하고 모든 관련 파일을 이동하거나

  • 환경 변수 대화 상자에서 확장에 실패한 변수를 편집하십시오 (정확하게 처리하기에 충분하도록 변경하십시오-양이 충분하지 않습니다).


답변

2009 년 3 월 Microsoft 포럼에서이 질문을했지만 해결 된 적이 없습니다.

경로 환경 변수에서 % 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 \ 도구 \ binn \; C : \ 프로그램 파일 \ Microsoft SQL Server \ 90 \ DTS \ Binn \; C : \ 프로그램 파일 \ Microsoft SQL Server \ 90 \ 도구 \ Binn \ VSShell \ Common7 \ IDE \; C : \ Program Files \ Microsoft Visual Studio 8 \ Common7 \ IDE \ PrivateAssemblies \; % SYSTEMROOT % \ System32 \ WindowsPowerShell \ v1.0 \

그래서 편집 할 곳으로갑니다.

그리고 경로에 변수를 추가합니다.

% 프로그램 파일 % \ SysInternals; C : \ PROGRA ~ 1 \ Borland \ Delphi5 \ Projects \ Bpl; (한조각)

그런 다음 새 명령 프롬프트 창을 열면 환경 변수가 실제 값으로 바뀌지 않습니다.

경로 = % 프로그램 파일 % \ SysInternals; C : \ PROGRA ~ 1 \ Borland \ Delphi5 \ Projects \ Bpl (snip)>

다음 스크린 샷에서 볼 수 있습니다.


그러나 귀하의 질문에 대답하기 위해 : 나는 모른다. 할 수없는 것 같습니다.


답변

환경 변수에는 전역 및 사용자의 두 가지 수준이 있습니다. 사용자 환경 변수로 % Java_home %을 설정했지만 대신 전역 변수를 변경하는 경우 아무런 차이가 없습니다.


답변

사용자 환경 변수를 정의 할 때 PATH에 공백이 없는지 확인하십시오. 예 : C : \ GNAT \ bin; “:”사이의 공백으로 인해 C : \ GNAT \ include가 작동하지 않습니다. 및 “C : \ GNAT \ include”.


답변

MSTSC를 사용하여 / console 세션에 로그온 한 상태에서 환경 변수를 추가하십시오.

머신을 재부팅하면 환경 변수가 유지됩니다.

환경 변수를 변경하려고 할 때 기기에 연결된 방법에 따라 O / S에 문제가있는 것으로 보입니다.