developer tip

setx를 사용하여 Windows PATH 변수에 어떻게 추가합니까?

copycodes 2020. 11. 18. 09:19
반응형

setx를 사용하여 Windows PATH 변수에 어떻게 추가합니까? 이상한 문제가


.NET을 사용하여 Windows PATH 변수를 수정하고 싶습니다 setx. 다음은 Windows 8에서 50 % 이상 작동합니다.

setx PATH %PATH%;C:\Python27\;C:\Python27\Scripts\

"기본 인수는 2 번만 사용할 수 있습니다."라는 오류가 발생하면 다음과 같은 경우가 있습니다.

setx PATH "%PATH%;C:\Python27\;C:\Python27\Scripts\"

차이점은 두 번째 인수를 따옴표로 묶었다는 것입니다. %PATH%공백을 포함하도록 확장 할 때 따옴표가 필요하다고 생각합니다 .

그러나 Windows 7에서 이상한 문제가 발생했습니다. 특정 Windows 7 컴퓨터에서 다음과 같은 문제가 발생했습니다.

echo %PATH%

다음을 인쇄합니다.

C:\Foo\;C:\Bar\;[...lots of stuff...]C:\Baz\

그런 다음 이렇게합니다.

setx PATH "%PATH%;C:\Quux\"

그런 다음 "오류 : 1,024 자에서 잘림"이라고 표시됩니다. 이제 PATH에 포함 된 내용을 확인하겠습니다.

echo %PATH%

다음을 인쇄합니다.

C:\Foo\;C:\Foo\;C:\Bar\;C:\Bar\;[...lots of stuff, now duplicated...]C:\B

... 그리고 1,024 자로 잘립니다. 중복 때문에 달렸습니다. 또한 흥미 롭습니다. PATH의 값은 setx오류가 발생하고 "성공"이라고 말하지 않았 음에도 불구하고 변경 됩니다.

이 이상한 동작을 여러 번 반복 할 수있었습니다 (다행히도 PATH의 원래 내용을 저장했습니다).

현재 내가 아는 유일한 확실한 방법은 PATH에 추가하는 것입니다.

  1. echo 경로.

  2. PATH의 내용을 텍스트 파일에 복사하고 수동으로 ;C:\Python27\;C:\Python27\Scripts\PATH 끝에 추가 합니다.

  3. 텍스트 파일에서 모든 것을 복사하십시오.

  4. setx PATH "<paste the string here>"

이 프로세스는 Windows 7과 Windows 8 모두에서 매번 작동합니다.

나는 이것을 하나의 명령으로 정말로 할 수 있어야한다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

감사합니다.


cmd관리자 권한 으로 실행 한 다음 :

setx /M PATH "%PATH%;<your-new-path>"

/ M 옵션은 SYSTEM 범위에서 변수를 설정합니다. 기본 동작은 USER에 대해 설정하는 것입니다.

TL; DR

잘림 문제는 % PATH %를 에코 할 때 SYSTEM 및 USER 값의 연결을 표시하기 때문에 발생합니다. 따라서 setx에 대한 두 번째 인수에 추가하면 USER var 안에 SYSTEM 및 USER 값이 들어갑니다. 다시 울리면 일이 두 배가 될 것입니다.

또한 / M 옵션에는 관리자 권한이 필요하므로 "관리자 권한으로 실행"을 사용하여 터미널을 열어야합니다. 그렇지 않으면 setx가 "레지스트리 경로에 대한 액세스가 거부되었습니다"라는 메시지를 표시합니다.

마지막으로 유의할 사항 :이 방식으로 설정 한 직후 % PATH %를 에코 할 때 새 값이 표시되지 않으므로 닫고 cmd다시 열어야합니다.

레지스트리에 저장된 실제 값을 확인하려면 이 질문을 확인 하십시오 .


이것은 완벽하게 작동합니다.

for /f "usebackq tokens=2,*" %A in (`reg query HKCU\Environment /v PATH`) do set my_user_path=%B

setx PATH "C:\Python27;C:\Python27\Scripts;%my_user_path%"

첫 번째 명령은 USER 환경 변수 'PATH'를 'my_user_path'변수로 가져옵니다. 두 번째 줄은 'C : \ Python27; C : \ Python27 \ Scripts;'앞에 추가합니다. USER 환경 변수 'PATH'에


에 속하지 않는 경우 pathedsetx 와 같은 대체 명령 줄 도구를 사용할 수 있습니다 . https://superuser.com/questions/297947/is-there-a-convenient-way-to-edit-path-in-windows-7/655712#655712에 더 포괄적 인 대체 PATH 편집기 목록이 있습니다.

레지스트리 값을 직접 편집 할 수도 있습니다 setx. 답변 에서 더 .

%PATH%1024 자에서 잘리는 것이 이상합니다 . 나는 setx그 문제가 없다고 생각 했다. 유효하지 않은 경로 항목을 정리해야 할 수도 있습니다.


누군가 PowerShell에서 실행하려면 아래와 같이 작동합니다.

관리자 권한으로 Powershell 실행

그때

setx /M PATH "$Env:PATH;<path to add>"

확인하려면 다른 Powershell을 열고 아래와 같이 PATH를 확인하십시오.

$Env:PATH

관리자 권한이 없으면 다음 코드가 포함 된 bat 파일 만 저에게 효과적이었습니다.

for /F "tokens=2* delims= " %%f IN ('reg query HKCU\Environment /v PATH ^| findstr /i path') do set OLD_SYSTEM_PATH=%%g
setx PATH "%USERPROFILE%\wev-tools;%OLD_SYSTEM_PATH%"

코드는 https://stackoverflow.com/a/45566845/4717152https://stackoverflow.com/a/10292113/4717152 답변의 조합입니다.


나는 같은 문제에 직면했고 이제 쉬운 해결책을 찾았습니다.

Pathman 사용.

pathman /as %M2%

Adds for example %M2% to the system path. Nothing more and nothing less. No more problems getting a mixture of user PATH and system PATH. No more hardly trying to get the correct values from registry...

Tried at Windows 10


Steps: 1. Open a command prompt with administrator's rights.

Steps: 2. Run the command: setx /M PATH "path\to;%PATH%"

[Note: Be sure to alter the command so that path\to reflects the folder path from your root.]

Example : setx /M PATH "C:\Program Files;%PATH%"


I was having such trouble managing my computer labs when the %PATH% environment variable approached 1024 characters that I wrote a Powershell script to fix it.

You can download the code here: https://gallery.technet.microsoft.com/scriptcenter/Edit-and-shorten-PATH-37ef3189

You can also use it as a simple way to safely add, remove and parse PATH entries. Enjoy.

참고URL : https://stackoverflow.com/questions/19287379/how-do-i-add-to-the-windows-path-variable-using-setx-having-weird-problems

반응형