명령 행을 통해 시스템의 PATH 변수에 항목을 영구적으로 추가하려면 어떻게해야합니까?


13

내가 해야하는 것:

  • %PATH%SYSTEM 레벨에서 환경 변수에 폴더를 추가하십시오 .
  • 영구적으로 변경하십시오.

어떻게해야합니까 :

  • 명령 프롬프트 또는 필요한 모든 명령.BAT파일에 쓸 수있는 다른 방법을 사용 합니다.
  • 인터넷에 연결하지 않고 Windows XP SP3을 설치할 때 사용할 수있는 도구 사용 합니다.
  • 스크립트를 로컬로 실행하고 싶지만 대상 시스템에 원격으로 액세스 할 수도 있습니다. 그러나 시스템에서 기본이 아닌 서비스 (예 : 원격 레지스트리)가 활성화되어 있다고 가정 할 수는 없습니다.

스크립트가 작동해야하는 시스템 :

  • Windows XP SP3
  • Windows Server 2003 SP2
  • Windows 7 SP1
  • Windows Server 2008 R2 SP1

나는 SET명령에 상당히 익숙 하지만 일반적으로 추가하는 대신 기존 변수를 덮어 쓸 것임을 알고 있습니다. 허용되지 않습니다. SET변수에 대신 추가 할 다른 도구 (또는 옵션 , 알지 못함)가 있습니까? 또는 기존 변수를 다른 변수 또는 텍스트 파일에 임시로 복사하는 것을 포함하여 해결 방법을 스크립트에 넣어야합니까?

또한 변수를 영구적으로 변경 SET하지 않는 것은 내 이해입니다 . 에 대한 언급을 보았지만 Windows XP SP3에 기본적으로 제공되지 않는 것 같습니다 (또는 적어도 작업중 인 시스템에서 사용할 수없는 것으로 보입니다). 레지스트리 편집 등을 통해 변경을 영구적으로 만드는 또 다른 방법이 있습니까?SETX

몇 가지 둘러보고 Windows에서 환경 변수 설정에 대해 여기에서 조금 배웠습니다. 그러나 아직 내 요구에 맞는 정확한 중복 질문을 찾지 못했습니다 . 하나 있으면 알려주십시오.


Setx는 XP와 함께 제공되지 않습니다. 하나 이상의 리소스 키트에 있지만 어느 것이 잘못되었는지 잊습니다. 명령 행에서 영구적으로 환경 변수를 변경하는 것이 가장 쉬운 방법입니다. 레지스트리 (HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ Session Manager \ Environment)를 변경할 수 있지만 명령 줄에서 레지스트리를 변경해도 문제가되지 않습니다. 내가 너라면, 이것을하기 위해 VBScript를 작성할 것이다.
EBGreen

@EBGreen REG레지스트리를 변경 하는 데 익숙 합니다. 기존 경로를 유지하는 방법에 대한 제안과 함께 답변으로 게시하려면 적어도 투표를하십시오.
Iszi

1
EBGreen의 제안에 따라 어떻게해야하는지 알았습니다. 이제 탐색기를 재부팅하거나 다시로드하지 않고 레지스트리를 새로 고치거나 환경 변수로 푸시하는 방법이 있었으면 좋습니까?
Iszi

1
@EBGreen 그래, 그렇게 생겼어. 그런데 구문을 알아낼 시간이 있다면 실제 답변을 게시 할 수 있습니까? 오히려 이것은 스스로 대답하는 질문으로 바뀌지 않을 것입니다.
Iszi

1
@lszi, 당신은 당신의 자신의 질문에 대답해야합니다. 좋은 질문에 대한 정답은 스스로 대답 할 때도 가치가 있습니다.
Myrddin Emrys

답변:


4

다음은 경로에 'C : \ bin'을 추가 한 다음 새 경로를 레지스트리에 저장합니다.

set path=%path%;C:\bin
reg.exe ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v Path /t REG_EXPAND_SZ /d %path% /f

XP SP3에서만 테스트했지만 최신 버전에서도 작동합니다.

컴퓨터를 다시 부팅하기 전에 로그온 한 새 사용자가 새 경로를 얻지 못할 수 있습니다.

Harry는 % SystemRoot %에 대한 그의 의견에 맞습니다. 이것을 유지하려면 먼저 레지스트리에서 경로의 이전 값을 가져와야합니다.

@echo OFF

set KEY_NAME="HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment"
set VALUE_NAME=Path

FOR /F "usebackq skip=4 tokens=1-3" %%A IN (`REG QUERY %KEY_NAME% /v %VALUE_NAME% 2^>nul`) DO (
  set ValueName=%%A
  set ValueValue=%%C
)

if defined ValueName (

  set newPath=%ValueValue%;C:\bin

  reg.exe ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v Path /t REG_EXPAND_SZ /d %newPath% /f

  set path=%path%;C:\bin

) else (
    @echo %KEY_NAME%\%VALUE_NAME% not found.
)

2
이는 환경 변수 참조를 확장하여 기존 PATH 항목 중 일부를 변경합니다. 예를 들어 표준 항목 % SystemRoot % \ system32는 c : \ windows \ system32로 바뀝니다. 이 특정 예제는 SystemRoot가 상수이기 때문에 중요하지 않지만 누군가가 환경 변수에 대한 참조를 사용하여 PATH를 설정 한 경우 변경됩니다. (필자는 현재 Sun JDK의 bin 디렉토리를 가리 키도록 내 컴퓨터의 일부에이 작업을 수행.)
해리 존스턴

경로에 대괄호 (예 : Program Files (x86)에 대한 참조)가 포함되어 있으면 새 스크립트가 작성된대로 작동하지 않습니다.
Harry Johnston

-1
set path=%path%;C:\bin
reg.exe ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v Path /t REG_EXPAND_SZ /d ^%path^% /f

2
베어 명령이 유용 할 수 있지만 질문 / 답변에 약간의 작업이 필요합니다. 이것이 OP 질문에 어떻게 대답하는지 설명하십시오.
Ƭᴇcʜιᴇ007
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.