OS 수준 구성에서 환경 변수를 제거하는 명령줄
Windows 에는, 다음의 커맨드가 있습니다.
Description:
Creates or modifies environment variables in the user or system
environment.
따라서 다음과 같은 변수를 설정할 수 있습니다.
setx FOOBAR 1
다음과 같이 값을 지울 수 있습니다.
setx FOOBAR ""
단, 변수는 삭제되지 않습니다.레지스트리에 남습니다.
그러면 변수를 실제로 어떻게 제거할 수 있을까요?
현재 환경에서 변수를 제거하려면(영구적이지 않음) 다음 절차를 수행합니다.
set FOOBAR=
사용자 환경(기본 위치)에서 변수를 영구적으로 제거하려면 다음과 같이 하십시오.setx
( ) :
REG delete HKCU\Environment /F /V FOOBAR
변수가 시스템 환경에서 설정되어 있는 경우(예를 들어 원래 변수를 로 설정한 경우)setx /M
관리자 권한으로 다음을 수행합니다.
REG delete "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /F /V FOOBAR
주의: 위의 명령어는 기존 프로세스(및 기존 프로세스에서 분기된 일부 새로운 프로세스)에는 영향을 주지 않습니다.따라서 변경을 즉시 유효하게 하는 것이 중요한 경우 로그아웃 후 다시 로그인 또는 재부팅하는 것이 가장 쉽고 확실한 방법입니다.이것이 선택사항이 아니거나 더 자세히 알아보고 싶은 경우, 여기 있는 다른 답변 중 몇 가지는 사용 사례에 맞는 훌륭한 제안입니다.
변수를 합니다.set
- sign command - command - the after the the the the the the the the the the the the the the the the the the the the the the the the the the 뒤에 도 넣지 .
set FOOBAR=
, 「 」를 실행합니다.set
인수를 지정하지 않고 현재 환경을 확인합니다.변수는 목록에서 완전히 누락되어야 합니다.
주의: 현재 환경에서 변수만 삭제되며 레지스트리에 대한 변경은 유지되지 않습니다.새로운 명령어프로세스가 시작되면 변수는 다시 돌아옵니다.
이것은 꽤 많이 다루어졌지만, 중요한 정보가 누락되어 있습니다.이것이 어떻게 작동하는지를 명확히 하고 지친 여행자들에게 조금의 안도감을 줄 수 있기를 바랍니다. :-)
현재 프로세스에서 삭제
현재 프로세스에서 환경변수를 삭제하기 위해 이렇게 하는 것은 누구나 알고 있습니다.
set FOO=
영구 삭제
환경 변수에는 시스템 전체와 사용자라는 두 가지 세트가 있습니다.
사용자 환경 변수 삭제:
reg delete "HKCU\Environment" /v FOO /f
시스템 전체 환경 변수 삭제:
REG delete "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /F /V FOO
재부팅하지 않고 값 적용
여기 빠진 마법 정보가 있습니다!이 작업을 수행한 후에도 새 명령 창을 실행해도 환경 변수가 그대로 유지되는 이유가 궁금할 것입니다.그 이유는 탐험가 때문입니다.exe가 해당 환경을 업데이트하지 않았습니다.한 프로세스가 다른 프로세스를 시작하면 새 프로세스는 해당 프로세스를 시작한 프로세스에서 환경을 상속합니다.
재부팅하지 않고 이 문제를 해결하는 방법은 두 가지가 있습니다.가장 강력한 방법은 explor.exe 프로세스를 종료하고 다시 시작하는 것입니다.이 작업은 태스크 관리자에서 수행할 수 있습니다.단, 이 방법은 추천하지 않습니다.
다른 방법은 explor.exe에 환경이 변경되었으며 다시 읽어야 함을 알리는 것입니다.이것은 Windows 메시지(WM_SETTING CHANGE)를 브로드캐스트함으로써 이루어집니다.간단한 PowerShell 스크립트로 이를 수행할 수 있습니다.이 작업을 위해 쉽게 작성할 수 있지만 스크립트로 작성된 변경 후 업데이트 창 설정에서 하나를 찾았습니다.
if (-not ("win32.nativemethods" -as [type])) {
add-type -Namespace Win32 -Name NativeMethods -MemberDefinition @"
[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
public static extern IntPtr SendMessageTimeout(
IntPtr hWnd, uint Msg, UIntPtr wParam, string lParam,
uint fuFlags, uint uTimeout, out UIntPtr lpdwResult);
"@
}
$HWND_BROADCAST = [intptr]0xffff;
$WM_SETTINGCHANGE = 0x1a;
$result = [uintptr]::zero
[win32.nativemethods]::SendMessageTimeout($HWND_BROADCAST, $WM_SETTINGCHANGE,[uintptr]::Zero, "Environment", 2, 5000, [ref]$result);
요약
따라서 "FOO"라는 이름의 사용자 환경 변수를 삭제하고 나중에 실행하는 프로세스에 변경 사항을 반영하려면 다음을 수행합니다.
- PowerShell 스크립트를 파일에 저장합니다(updateenv.ps1이라고 합니다).
- 명령줄에서 이를 수행합니다.reg delete "HKCU\Environment" /v FOO / f
- updateenv.ps1을 실행합니다.
- 명령 프롬프트를 닫았다가 다시 열면 환경 변수가 더 이상 정의되지 않습니다.
이 스크립트를 실행하려면 PowerShell 설정을 업데이트해야 하지만 Google-fu 연습으로 남겨두겠습니다.
PowerShell에서 를 사용할 수 있습니다.NET 방식:
다음 사용자 환경 변수를 제거하려면 다음과 같이 하십시오.
FOO
:[Environment]::SetEnvironmentVariable('FOO', $null, 'User')
:$null
변수 제거 의도를 더 잘 알리기 위해 사용되지만, 기술적으로 이는 통과와 사실상 동일합니다.''
★★★★★★★★★★★★★★★★★★,
시스템(시스템 수준) 환경 변수 제거 방법
FOO
- 권한 상승 필요(관리자로서 실행해야 함):[Environment]::SetEnvironmentVariable('FOO', $null, 'Machine')
실행 속도가 빨라질 뿐만 아니라 다른 응용 프로그램에 변경을 통지할 수 있다는 장점이 있습니다.WM_SETTINGCHANGE
메시지 - 실제로 이 메시지를 듣고 응답으로 환경을 업데이트하는 응용 프로그램은 거의 없지만 Windows(GUI) 셸은 실행되므로 이후 데스크톱/태스크바/시작 메뉴에서 파일 탐색기를 통해 실행한 응용 프로그램이 업데이트된 환경을 볼 수 있습니다.
재부팅하지 않고 삭제
Powershell, vbscript 또는 사용자가 이름을 지정하여 재부팅하지 않는 방법을 포함하여 OP의 질문에 대한 답변은 매우 다양합니다.
그러나 cmd 명령만 사용해야 하고 powershell 또는 vbscript를 호출할 수 없는 경우에는 다음과 같은 방법을 사용할 수 있습니다.
rem remove from current cmd instance
SET FOOBAR=
rem remove from the registry if it's a user variable
REG delete HKCU\Environment /F /V FOOBAR
rem remove from the registry if it's a system variable
REG delete "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /F /V FOOBAR
rem tell Explorer.exe to reload the environment from the registry
SETX DUMMY ""
rem remove the dummy
REG delete HKCU\Environment /F /V DUMMY
여기서의 매직은 "setx"를 사용하여 불필요한 변수(예시 DUMY)에 할당함으로써 Explorer.exe가 강제로 레지스트리에서 변수를 다시 읽도록 하는 것입니다.파워셸은 필요 없습니다.그런 다음 이 더미를 청소합니다. 그리고 이 더미는 익스플로러 환경에서 잠시 동안 머무르더라도 아마 아무도 해치지 않을 것입니다.
또는 변수를 삭제한 후 새 변수를 설정해야 하는 경우에는 더미도 필요하지 않습니다.SETX를 사용하여 새 변수를 설정하는 것만으로 시작할 수 있는 새 cmd 작업에서 방금 제거한 변수가 자동으로 지워집니다.
배경 정보:이 접근방식을 사용하여 기존 cmd 스크립트를 수정하여 사용자 변수 집합을 작업 중인 모든 컴퓨터에서 동일한 이름의 시스템 변수로 대체했습니다.컴퓨터가 너무 많아서 수동으로 할 수 없습니다.또한 모든 컴퓨터에 여분의 powershell이나 vbscript를 복사하는 것도 실용적이지 않았습니다.사용자를 시스템 변수로 대체해야 하는 이유는 로밍 프로파일로 사용자 변수가 동기화되기 때문에(생각하지 않았습니다), 같은 창을 사용하지만 다른 값을 필요로 하는 여러 머신이 혼재하기 때문입니다.
나는 큐판태의 말에 동의해.
SET
는 마스터 환경 변경에는 도움이 되지 않습니다.
참고: 시스템 변수가 다음 위치에 있습니다.HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment
(사용자 변수보다 훨씬 더 길다).
따라서 FOOBAR라는 이름의 시스템바에 대한 완전한 명령어는 다음과 같습니다.
REG delete "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /F /V FOOBAR
(스페이스 처리에 필요한 따옴표를 적어 둡니다).
아쉽다setx
명령어는 삭제 구문을 지원하지 않습니다. : (
PS: 책임감 있게 사용 - 경로 변수를 죽여도 내 탓은 하지 마세요!
DougWare의 답변에 있는 명령은 작동하지 않았지만, 다음과 같은 작업이 수행되었습니다.
reg delete "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v FOOBAR /f
숏컷HKLM
에 사용할 수 있다HKEY_LOCAL_MACHINE
.
setx FOOBAR ""
FOOBAR 값이 늘 문자열이 되도록 할 뿐입니다(단,set
명령어에 "를 붙이기 때문에 이중 문자열이 될 수 있습니다.)
사용:
set FOOBAR=
그 후 FOOBAR는 set 명령어에 표시되지 않게 되었습니다.(로그오프할 필요가 없었습니다.
Windows 7 32비트 명령 프롬프트를 사용하여 관리자가 아닌 것을 사용했습니다.(cmd 또는 +가 아닌 경우가 있습니다).
덧붙여서, 내가 만든 변수를 내가 만든 후 레지스트리 어디에도 못 봤어.관리자 권한이 아닌 RegEdit을 사용하고 있습니다.
작은 VBScript 스크립트를 작성할 수도 있습니다.
Set env = CreateObject("WScript.Shell").Environment("System")
If env(WScript.Arguments(0)) <> vbNullString Then env.Remove WScript.Arguments(0)
이렇게 .%windir%\System32\cscript.exe //Nologo "script_name.vbs" FOOBAR
.
단점은 추가 스크립트가 필요하지만 재부팅이 필요하지 않다는 것입니다.
그런데 방금 setx를 사용하여 설정한 영구 변수를 설정하는 방법을 알아냈어요.
다음과 같이 따옴표를 붙입니다.
setx myvar ""
다음 cmd 창에서 변수를 검색하면
set myvar
아무것도 정해져 있지 않을 것이다.
PowerShell에서 레지스트리 값을 삭제하려면 Remove-ItemProperty cmdlet을 사용합니다.이 경우 (향후 프로세스의 경우) 영속값은 다음과 같이 삭제됩니다.
Remove-ItemProperty HKCU:\Environment FOOBAR
현재 환경에서 제거하려면 Env에서 다음과 같이 "드라이브"를 제거하면 됩니다.
rm env:\FOOBAR
이 경우 SETX.exe를 사용할 수 없습니다.
언급URL : https://stackoverflow.com/questions/13222724/command-line-to-remove-an-environment-variable-from-the-os-level-configuration
'programing' 카테고리의 다른 글
xlsm 또는 xlsb 형식은 언제 사용해야 합니까? (0) | 2023.04.19 |
---|---|
배치 파일에 파일이 있는지 확인하는 방법 (0) | 2023.04.14 |
Windows용 Git Bash에서 에일리어스를 설정하는 방법 (0) | 2023.04.14 |
Bash의 'eval' 명령어와 그 일반적인 용도 (0) | 2023.04.14 |
Android 에뮬레이터(qemu-system-i386.exe)를 통한 높은 CPU 사용률 (0) | 2023.04.14 |