나는 사용자/시스템 환경 변수를 설정/제거하기 위해 다음 명령을 사용해 왔습니다.
체계:
setx -m PATH "%PATH%C:\Program Files\Git\cmd;C:\Program Files\Git\mingw64\bin;C:\Program Files\Git\usr\bin;"
사용자:
setx VAR1 "CONTENT OF VAR1"
나중에 나는 이러한 한계를 발견했습니다.
- 길이가
%PATH%
너무 길면 다음 경고가 표시되고%PATH%
변수가 잘립니다.
경고: 저장되는 데이터는 1024자로 잘립니다.
- 명령 에 대한 도움말에 따르면 다음과 같습니다
setx
.
Setx.exe를 사용하여 환경 변수 값을 지울 때 환경 변수 이름은 영향을 받지 않습니다.
즉, 실행하면 삭제되지 않고 비어 있습니다 setx -m OCVLIBDIR ""
.OCVLIBDIR
그러한 한계를 어떻게 극복할 수 있습니까?
추신: 저는 Windows 10에 포함된 도구(예: PowerShell)를 선호하지만 타사 도구도 사용하는 것은 문제가 되지 않습니다(비록 제가 보기에는 과잉처럼 보이지만).
PPS: Windows GUI, 레지스터 또는 일부 타사 GUI 도구를 통해 변수를 편집할 수 있다는 것을 알고 있지만 여러 시나리오를 스크립팅하고 이들 사이를 빠르게 전환할 수 있기 때문에 스크립트를 선호합니다. 이는 제가 다양한 라이브러리를 실험할 때 유용합니다. 내 시스템(예: opencv의 다양한 버전 등).
답변1
파워셸
이 TechNet 기사기본 사항을 설명합니다.
이 답변시스템 및 사용자 환경 변수 가져오기에 대해 설명합니다(첫 번째 기사에서만 힌트를 주었음). "Machine"
시스템, "User"
현재 사용자 및 "Process"
최종 시스템/사용자 콤보를 얻는 데 작동하는 현재 프로세스에 대해.
PowerShell 연결에 대해서는 다음에서 설명합니다.이 질문과 답변. +
에서와 같이 문자열을 연결 하거나 대체를 사용하여 조합할 수 있습니다 "{0} {1}" -f "Hello","World"
.
괄호는 구성을 그룹화하는 데 사용됩니다.
변수는 유형이 지정되지 않고 선언되지 않으며 $
.
모두 합치면 다음과 같은 결과가 나옵니다.
$path = [Environment]::GetEnvironmentVariable("PATH","User")
[Environment]::SetEnvironmentVariable("PATH",$path+";C:\Temp","User")
또는 한 줄로:
[Environment]::SetEnvironmentVariable("PATH",([Environment]::GetEnvironmentVariable("PATH","User"))+";C:\Temp","User")
이 기사$null
환경 변수( 특수 변수) 를 삭제하는 방법을 설명합니다 .
[Environment]::SetEnvironmentVariable("MyTestVariable",$null,"User")
이러한 방식으로 수행된 환경 변수에 대한 변경 사항은 전역적으로 사용할 수 있습니다.
명령
reg.exe
레지스트리 항목을 추가, 변경 및 삭제할 수 있습니다. 환경 변수는 레지스트리에 있습니다.이 답변reg
환경 변수를 삭제하는 데 사용하는 방법에 대해 설명합니다 .
사용자 환경 변수의 경우:
reg DELETE HKCU\Environment /v envvarname
시스템 환경 변수의 경우:
reg DELETE "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v envvarname
( HKCU
는 와 상호교환 가능합니다 HKEY_CURRENT_USER
. HKLM
는 와 상호교환 가능합니다 HKEY_LOCAL_MACHINE
.)
( CMD
빈 환경 변수는 존재하지 않는 환경 변수와 동일하게 처리됩니다. 하지만 시스템에서 변수를 제거하려고 한다는 것을 이해합니다.)