PATH उपयोगकर्ता पर्यावरण चर को कमांड-लाइन से कैसे अपडेट करें


12

मेरे पास सिस्टम स्तर विन्यास के साथ एक प्रणाली पैठ चर है। मैं PATH को उपयोगकर्ता-विशिष्ट कॉन्फ़िगरेशन के साथ पूरक करने के लिए उपयोगकर्ता PATH चर का उपयोग करता हूं।

मैं सेट -अप के साथ उदाहरण के लिए कमांड-लाइन से उपयोगकर्ता पथ चर को अपडेट करना चाहूंगा।

लेकिन मुझे पता नहीं है कि सेटएक्स में मौजूदा उपयोगकर्ता पथ को कैसे संदर्भित किया जाए।

निम्नलिखित कमांड में (बिना / एम सेट करें)

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

पहले PATH का अर्थ है उपयोगकर्ता PATH लेकिन दूसरा% PATH% "पूर्ण" (उपयोगकर्ता + सिस्टम) PATH द्वारा प्रतिस्थापित किया जाएगा।

तो इसका मतलब है कि पूरे सिस्टम पथ को उपयोगकर्ता PATH में डुप्लिकेट किया जाएगा ... निश्चित रूप से वह नहीं है जो मुझे चाहिए।

मैं:

  • केवल उपयोगकर्ता पथ पर्यावरण चर को प्रभावित करें
  • मौजूदा मान में एक या अधिक पथ तत्व जोड़ें / रोकें
  • कमांड-लाइन से करें।

मुझे लगता है कि जब आप उपयोग ;%PATH%करते हैं तो आप मौजूदा पथ (सिस्टम पथ से प्राप्त) को संलग्न करने के लिए कह रहे हैं।
डैनियल आर हिक्स

जवाबों:


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" मान को प्रीपेन्ड करने के लिए:

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

मौजूदा उपयोगकर्ता पथ के लिए "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" )

अगर-अन्य शर्त की आवश्यकता है, क्योंकि उपयोगकर्ता PATH में रिक्त स्थान हो भी सकता है और नहीं भी। यदि आप चाहते हैं कि आप कमांड को सामान्य बैच फ़ाइलों के रूप में सहेज सकते हैं (प्रत्येक% चिह्न को दोगुना करना सुनिश्चित करें) जो मान को एक तर्क के रूप में सेट / प्रीपेड / एपेंड किया जाना स्वीकार करते हैं।

बैच फ़ाइल

:: 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
अधिक स्पष्टीकरण की जरूरत है। % b क्या है,% b क्या है?
ofusJK

यदि उपयोगकर्ता PATH को पहले से परिभाषित नहीं किया गया है तो दुर्भाग्य से यह काम नहीं करता है :(
nowox

@KJK: for /?आपको वह सब बताएंगे जो आपको जानना चाहिए। :) मैं यह सब यहाँ अनावश्यक रूप से दोहराना नहीं चाहता था और सोचा था कि जानकारी को वैसे भी समझ लेना आसान होगा।
करण

यदि उपयोगकर्ता PATH पहले से ही अर्धविराम के साथ समाप्त हो जाता है तो कोड की जाँच नहीं होती है, जिसमें उत्तीर्ण निर्देशिका को अतिरिक्त अर्धविराम के बिना किया जाना चाहिए। लेकिन इस कोड के साथ सबसे बड़ी समस्या उपयोगकर्ता का एक भ्रष्टाचार है PATHयदि स्ट्रिंग 1024 वर्णों से अधिक लंबी हो जाती है क्योंकि यह विंडोज़ रजिस्ट्री में जोड़ने से पहले एक उपयुक्त जानकारी प्रदर्शित करने के साथ स्ट्रिंग को 1024 वर्णों तक setx काट देती है। तो यह हो सकता है कि पारित निर्देशिका को जोड़ने के बजाय, मौजूदा उपयोगकर्ता PATH इस कोड द्वारा काटे गए (विकृत) हैं।
मोफी जूल 25'19

4

जरूरत है SETX /M, डिफ़ॉल्ट SETXकरने के लिए सेटHKEY_CURRENT_USER

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

यह सिस्टम PATH वैरिएबल को प्रभावित करता है ... हो सकता है कि मेरा उदाहरण भ्रामक था, लेकिन मैं विशेष रूप से उपयोगकर्ता पैथ वेरिएबल को अपडेट करना चाहता हूं।
ईसाई लमेर

@ क्रिस op111.net/82
STTR

1

यह काम करने लगता है:

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

यह एक पूर्ण NO GO है, कभी भी लोकल का उपयोग करके उपयोगकर्ता या सिस्टम को अपडेट करने के लिए नहीं है । यह कमांड लाइन वास्तव में भ्रष्ट उपयोगकर्ता के लिए 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
मोफी जूल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.