명령 행에서 PATH 사용자 환경 변수를 업데이트하는 방법


12

시스템 레벨 구성의 시스템 PATH 변수가 있습니다. user PATH 변수를 사용하여 PATH를 사용자 별 구성으로 보완합니다.

setx를 사용하여 명령 줄에서 사용자 PATH 변수업데이트하고 싶습니다.

그러나 setx에서 기존 사용자 경로를 참조하는 방법을 모르겠습니다.

다음 명령에서 (/ M이없는 setx)

setx PATH c:\my-user-specifc-bin-path;%PATH%

첫 번째 PATH는 사용자 PATH를 의미하지만 두 번째 % PATH %는 "full"(사용자 + 시스템) PATH로 대체됩니다.

따라서 전체 시스템 경로가 사용자 PATH에 복제된다는 것을 의미합니다.

나는 다음과 같이하고 싶다 :

  • 사용자 PATH 환경 변수에만 영향을줍니다.
  • 하나 이상의 경로 요소를 기존 값에 추가 / 추가
  • 명령 행에서 수행하십시오.

사용할 때 ;%PATH%기존 경로 (시스템 경로에서 파생 됨)를 추가하도록 요청 하는 것 같습니다 .
Daniel R Hicks

답변:


3

PowerShell 버전, 사용자에 대한 PATH 설정 :

  1. 현재 사용자의 새 PATH 설정 (덮어 쓰기) :
PS> Set-ItemProperty -path HKCU:\Environment\ -Name Path -Value "C:\MyPath1"
  1. 현재 사용자 PATH에 추가를 설정하십시오.
PS> Set-ItemProperty -path HKCU:\Environment\ -Name Path -Value "$((Get-ItemProperty -path HKCU:\Environment\ -Name Path).Path);C:\MyPath1"
  1. 현재 사용자 PATH 앞에 추가를 설정하십시오.
PS> Set-ItemProperty -path HKCU:\Environment\ -Name Path -Value "C:\MyPath1;$((Get-ItemProperty -path HKCU:\Environment\ -Name Path).Path)"

12

이전 값을 덮어 쓰는 사용자 경로를 설정하려면

setx PATH "C:\MyPath1"

"C : \ MyPath0"값을 기존 사용자 PATH 앞에 추가하려면 다음을 수행하십시오.

for /f "skip=2 tokens=3*" %a in ('reg query HKCU\Environment /v PATH') do @if [%b]==[] ( @setx PATH "C:\MyPath0;%~a" ) else ( @setx PATH "C:\MyPath0;%~a %~b" )

기존 사용자 PATH에 "C : \ MyPath2"값을 추가하려면 다음을 수행하십시오.

for /f "skip=2 tokens=3*" %a in ('reg query HKCU\Environment /v PATH') do @if [%b]==[] ( @setx PATH "%~a;C:\MyPath2" ) else ( @setx PATH "%~a %~b;C:\MyPath2" )

User PATH는 공백을 포함하거나 포함하지 않을 수 있으므로 if-else 조건이 필요합니다. 원하는 경우 값을 인수로 설정 / 추가 / 추가하는 일반 배치 파일 (각 % 기호를 두 배로)로 명령을 저장할 수 있습니다.

배치 파일

:: PATH-ADD - add a path to user path environment variable

@echo off
setlocal

:: set user path
set ok=0
for /f "skip=2 tokens=3*" %%a in ('reg query HKCU\Environment /v PATH') do if [%%b]==[] ( setx PATH "%%~a;%1" && set ok=1 ) else ( setx PATH "%%~a %%~b;%1" && set ok=1 )
if "%ok%" == "0" setx PATH "%1"

:end
endlocal
echo.

1
더 많은 설명이 필요했습니다. % a는 무엇입니까, % b는 무엇입니까?
OfusJK

불행히도 사용자 PATH가 아직 정의되지 않은 경우 작동하지 않습니다 :(
nowox

@ KJK : for /?당신이 알아야 할 모든 것을 말해 줄 것입니다. :) 불필요하게 여기에서 모든 것을 복제하고 싶지 않았으며 정보가 어쨌든 파악하기 쉽다고 생각했습니다.
Karan

이 코드는 사용자가 PATH 이미 세미콜론으로 끝나는 지 확인하지 않으며 ,이 경우 추가 세미콜론없이 전달 된 디렉토리를 추가해야합니다. 그러나이 코드의 가장 큰 문제는 Windows 레지스트리에 추가하기 전에 적절한 정보를 표시하고 문자열을 1024 자로 자르기 때문에 문자열이 1024 자보다 길면 사용자 가 손상되는 PATH것 입니다. 따라서 전달 된 디렉토리를 추가하는 대신 이 코드로 인해 기존 사용자 가 잘릴 수 있습니다. setx PATH
Mofi

4

필요 SETX /M, 기본값 SETXHKEY_CURRENT_USER

SETX /M PATH c:\my-bin-path;%PATH%

이것은 시스템 PATH 변수에 영향을 미칩니다. 아마도 내 예제가 잘못 인식되었을 수 있지만 사용자 PATH 변수를 구체적으로 업데이트하고 싶습니다.
Christian Lemer

@ 크리스 op111.net/82
STTR

1

이것은 작동하는 것 같습니다 :

setx PATH "c:\my-user-specifc-bin-path-which-may-contain-spaces;"%%PATH%%

절대 NO GO이며 절대로 local을 사용하여 사용자 또는 시스템 을 업데이트하지 마십시오 . 이 명령 줄 은 최상의 경우 에 사용자 문자열 을 Windows 레지스트리에 추가하여 사용자 를 실제로 손상시킵니다 . 이 명령 줄 을 사용하는 모든 사람은 Windows를 다시 시작하거나 로그 오프 / 로그온 한 후 현재 사용자 계정으로 실행중인 모든 프로세스에서 사용하는 로컬사용자 설정을 성공적으로 손상 시켰습니다. PATH PATH PATH PATHc:\my-user-specifc-bin-path-which-may-contain-spaces;%C:\Windows\System32;C:\Windows;C:\Windows\System32\wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;% PATH PATH
Mofi
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.