Windows 10의 명령줄에서 사용자 및 시스템 환경 변수 조작

Windows 10의 명령줄에서 사용자 및 시스템 환경 변수 조작

나는 사용자/시스템 환경 변수를 설정/제거하기 위해 다음 명령을 사용해 왔습니다.

체계:

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"

나중에 나는 이러한 한계를 발견했습니다.

  1. 길이가 %PATH%너무 길면 다음 경고가 표시되고 %PATH%변수가 잘립니다.

경고: 저장되는 데이터는 1024자로 잘립니다.

  1. 명령 에 대한 도움말에 따르면 다음과 같습니다 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빈 환경 변수는 존재하지 않는 환경 변수와 동일하게 처리됩니다. 하지만 시스템에서 변수를 제거하려고 한다는 것을 이해합니다.)

관련 정보