Cara memperbarui variabel lingkungan pengguna PATH dari baris perintah

12

Saya memiliki variabel sistem PATH dengan konfigurasi tingkat sistem. Saya menggunakan variabel PATH pengguna untuk melengkapi PATH dengan konfigurasi khusus pengguna.

Saya ingin memperbarui variabel PATH pengguna dari command-line misalnya dengan setx.

Tapi saya tidak tahu bagaimana referensi jalur pengguna yang ada di setx.

Dalam perintah berikut (setx tanpa / M)

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

PATH pertama berarti PATH pengguna tetapi% PATH% kedua akan diganti dengan PATH "lengkap" (sistem + pengguna).

Jadi itu berarti bahwa seluruh jalur sistem akan diduplikasi dalam PATH pengguna ... apa yang pasti bukan yang saya inginkan.

Saya minta:

  • Hanya memengaruhi variabel lingkungan PATH pengguna
  • Tambahkan / Tambahkan satu elemen jalan atau lebih ke nilai yang ada
  • Lakukan dari baris perintah.
Christian Lemer
sumber
Menurut saya, ketika Anda menggunakan ;%PATH%Anda meminta jalur yang ada (berasal dari jalur sistem) untuk ditambahkan.
Daniel R Hicks

Jawaban:

3

Versi PowerShell, atur PATH untuk pengguna:

  1. Setel PATH baru (timpa) untuk pengguna saat ini:
PS> Set-ItemProperty -path HKCU:\Environment\ -Name Path -Value "C:\MyPath1"
  1. Tetapkan tambahkan ke PATH pengguna saat ini:
PS> Set-ItemProperty -path HKCU:\Environment\ -Name Path -Value "$((Get-ItemProperty -path HKCU:\Environment\ -Name Path).Path);C:\MyPath1"
  1. Setel prepend ke PATH pengguna saat ini:
PS> Set-ItemProperty -path HKCU:\Environment\ -Name Path -Value "C:\MyPath1;$((Get-ItemProperty -path HKCU:\Environment\ -Name Path).Path)"
Terima kasih
sumber
12

Untuk mengatur PATH Pengguna menimpa nilai sebelumnya:

setx PATH "C:\MyPath1"

Untuk menambahkan nilai "C: \ MyPath0" ke PATH Pengguna yang ada:

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

Untuk menambahkan nilai "C: \ MyPath2" ke PATH Pengguna yang ada:

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

Kondisi if-else diperlukan karena PATH Pengguna mungkin berisi spasi atau tidak. Jika mau, Anda dapat menyimpan perintah sebagai file batch umum (pastikan untuk menggandakan setiap tanda%) yang menerima nilai yang akan diset / prepended / ditambahkan sebagai argumen.

File Batch

:: 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.
Karan
sumber
1
diperlukan lebih banyak penjelasan. apa itu% a, apa itu% b?
OfusJK
Sayangnya tidak berfungsi jika PATH pengguna belum ditentukan :(
nowox
@KJK: for /?akan memberi tahu Anda semua yang perlu Anda ketahui. :) Saya tidak ingin mereplikasi semuanya di sini secara tidak perlu dan berpikir bahwa info akan mudah diketahui.
Karan
Kode tidak memeriksa apakah pengguna PATH sudah mengakhiri dengan titik koma di mana menambahkan direktori lulus harus dilakukan tanpa titik koma tambahan. Tetapi masalah terbesar dengan kode ini adalah korupsi pengguna PATH jika string menjadi lebih dari 1024 karakter karena setx memotong string menjadi 1024 karakter dengan menampilkan informasi yang sesuai sebelum menambahkannya ke registri Windows. Jadi bisa terjadi bahwa alih-alih menambahkan direktori yang disahkan, pengguna yang PATH ada terpotong (kacau) oleh kode ini.
Mofi
4

perlu SETX /M, default SETXdiatur keHKEY_CURRENT_USER

SETX /M PATH c:\my-bin-path;%PATH%
STTR
sumber
Ini memengaruhi variabel PATH sistem ... mungkin contoh saya keliru, tetapi saya ingin memperbarui variabel PATH pengguna secara khusus.
Christian Lemer
@ Chris op111.net/82
STTR
1

Ini sepertinya berhasil:

setx PATH "c:\my-user-specifc-bin-path-which-may-contain-spaces;"%%PATH%%
rsphillips
sumber
Ini mutlak TIDAK PERGI, PERNAH PERNAH memperbarui pengguna atau sistem PATH menggunakan lokal PATH . Baris perintah ini benar-benar merusak pengguna PATH dengan menambahkan ke string Windows registri untuk pengguna dalam kasus terbaik. Semua orang yang menggunakan baris perintah ini telah berhasil merusak pengaturan pengguna dan lokal seperti yang digunakan oleh semua proses yang berjalan dengan akun pengguna saat ini setelah Windows restart atau logoff / masuk. 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