PATH kullanıcı ortamı değişkenini komut satırından güncelleme


12

Sistem düzeyi yapılandırmalı bir sistem PATH değişkenim var. Kullanıcı PATH değişkenini PATH'ı kullanıcıya özel yapılandırma ile tamamlamak için kullanıyorum.

Kullanıcı PATH değişkenini komut satırından örneğin setx ile güncellemek istiyorum .

Ancak setx'te mevcut kullanıcı yoluna nasıl başvuracağımı bilmiyorum.

Aşağıdaki komutta (/ M olmadan setx)

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

ilk PATH kullanıcı PATH anlamına gelir, ancak ikinci% PATH% "tam" (kullanıcı + sistem) PATH ile değiştirilir.

Yani bu, tüm sistem yolunun PATH kullanıcısında çoğaltılacağı anlamına gelir ... ne istediğim kesinlikle değil.

İsterim:

  • Yalnızca kullanıcı PATH ortam değişkenini etkiler
  • Mevcut değere bir veya daha fazla yol öğesi ekle / ekle
  • Komut satırından yapın.

Bana öyle geliyor ki kullandığınızda ;%PATH%varolan yolu (sistem yolundan türetilmiş) eklenmesini istiyorsunuz.
Daniel R Hicks

Yanıtlar:


3

PowerShell sürümü, kullanıcı için PATH ayarlayın:

  1. Geçerli kullanıcı için yeni PATH (üzerine yaz) ayarla:
PS> Set-ItemProperty -path HKCU:\Environment\ -Name Path -Value "C:\MyPath1"
  1. Geçerli kullanıcı PATH değerine ekle ekle:
PS> Set-ItemProperty -path HKCU:\Environment\ -Name Path -Value "$((Get-ItemProperty -path HKCU:\Environment\ -Name Path).Path);C:\MyPath1"
  1. Geçerli kullanıcının PATH başına başını ayarla:
PS> Set-ItemProperty -path HKCU:\Environment\ -Name Path -Value "C:\MyPath1;$((Get-ItemProperty -path HKCU:\Environment\ -Name Path).Path)"

12

Kullanıcı YOLUNUN herhangi bir önceki değerinin üzerine yazmasını ayarlamak için:

setx PATH "C:\MyPath1"

Varolan Kullanıcı PATH değerine "C: \ MyPath0" değerini eklemek için:

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" )

Mevcut Kullanıcı PATH değerine "C: \ MyPath2" değeri eklemek için:

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" )

İf-else koşulu gereklidir, çünkü User PATH boşluk içerebilir veya içermeyebilir. İsterseniz komutları, bağımsız değişken olarak ayarlanacak / eklenecek / eklenecek değeri kabul eden genel toplu iş dosyaları olarak kaydedebilirsiniz (her bir% işaretini iki katına çıkardığınızdan emin olun).

Toplu Dosya

:: 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
daha fazla açıklama gerekiyor. % a nedir,% b nedir?
OfusJK

Ne yazık ki PATH kullanıcısı daha önce tanımlanmamışsa işe yaramaz :(
nowox

@KJK: for /?bilmeniz gereken her şeyi size söyleyecektir. :) Burada gereksiz yere çoğaltmak istemiyordum ve zaten bilgi bulmak kolay olacağını düşündüm.
Karan

Kod, kullanıcının PATH zaten bir noktalı virgülle bitip bitmediğini kontrol etmez ; bu durumda, geçirilen dizinin eklenmesine ek bir noktalı virgül olmadan işlem yapılması gerekir. Ancak, dize 1024 karakterden daha uzun olursa, dize 1024 karaktere kesilirse , Windows kayıt defterine eklemeden önce uygun bilgileri görüntüleyen bu kodla ilgili en büyük sorun kullanıcının bozulmasıdır . Bu nedenle, geçirilen dizini eklemek yerine, mevcut kullanıcının bu kod tarafından kesilmesi (bozulması) olabilir. PATHsetx PATH
Mofi

4

gerek SETX /M, varsayılan olarak SETXayarlanmışHKEY_CURRENT_USER

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

Bu sistem PATH değişkeni etkiler ... belki benim örnek yanlış yorumlama, ama özellikle kullanıcı PATH değişkenini güncellemek istiyorum.
Christian Lemer


1

Bu işe yarıyor gibi görünüyor:

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

Bu, kullanıcı veya sistemi yerel kullanarak güncellemek için HİÇBİR ZAMAN mutlak bir NO GO, olduğunu . Bu komut satırı gerçekten bozarsa kullanıcıyı Windows kayıt defterine ekleyerek kullanıcı dize iyi durumda. Bu komut satırını kullanan herkes, kullanıcı ayarını başarıyla bozmuştur ve Windows yeniden başlatıldıktan veya oturumu kapattıktan sonra geçerli kullanıcı hesabıyla çalışan tüm işlemler tarafından kullanılan kadar yereldir . 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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.