.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 자로 잘립니다. 중복 때문에 달렸습니다. 또한 흥미로운 점 : setx
오류가 발생하고 “성공”이라고 말하지 않았 음에도 불구하고 PATH의 값이 변경 됩니다.
이 이상한 동작을 여러 번 반복 할 수있었습니다 (다행히도 PATH의 원래 내용을 저장했습니다).
현재 내가 아는 유일한 확실한 방법은 PATH에 추가하는 것입니다.
-
echo
경로. -
PATH의 내용을 텍스트 파일에 복사하고 수동으로
;C:\Python27\;C:\Python27\Scripts\
PATH 끝에 추가 합니다. -
텍스트 파일에서 모든 것을 복사하십시오.
-
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’에
답변
누군가 PowerShell에서 실행하려면 아래와 같이 작동합니다.
관리자 권한으로 Powershell 실행
그때
setx /M PATH "$Env:PATH;<path to add>"
확인하려면 다른 Powershell을 열고 아래와 같이 PATH를 확인하십시오.
$Env:PATH
답변
에 속지 않는 경우 pathedsetx
와 같은 대체 명령 줄 도구를 사용할 수 있습니다 . /superuser/297947/is-there-a-convenient-way-to-edit-path-in-windows-7/655712#655712에 더 포괄적 인 대체 PATH 편집기 목록이 있습니다.
레지스트리 값을 직접 편집 할 수도 있습니다 setx
. 이 답변 에서 더 .
%PATH%
1024 자에서 잘리는 것이 이상합니다 . 나는 setx
그 문제가 없다고 생각 했다. 유효하지 않은 경로 항목을 정리해야 할 수도 있습니다.
답변
관리자 권한이 없으면 다음 코드가 포함 된 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/4717152 및 https://stackoverflow.com/a/10292113/4717152 답변의 조합입니다.
답변
나는 같은 문제에 직면했고 이제 쉬운 해결책을 찾았습니다.
Pathman 사용.
pathman /as %M2%
예를 들어 % M2 %를 시스템 경로에 추가합니다. 그 이상도 이하도 아닙니다. 사용자 PATH와 시스템 PATH를 혼합하는 데 더 이상 문제가 없습니다. 더 이상 레지스트리에서 올바른 값을 가져 오려고하지 않아도됩니다.
Windows 10에서 시도
답변
setx path "%PATH%; C:\Program Files (x86)\Microsoft Office\root\Office16" /m
이렇게하면 추가 항목없이 시스템 환경 변수 경로에 추가하고 데이터 손실없이 원본을 그대로 유지해야합니다. 이 명령을 사용하여 McAfee의 Web Control이 Microsoft의 Outlook 데스크톱 클라이언트에 수행하는 문제를 수정했습니다.
명령 줄은 공백을 구분 기호로 인식하고 명령 줄에서 다음 값을 실행하려고하기 때문에 따옴표가 경로 값에 사용됩니다. 따옴표는이 동작을 무시하고 따옴표 안의 모든 것을 문자열로 처리합니다.