कमांड प्रॉम्प्ट - केवल उस बैच फ़ाइल के निष्पादन के लिए एक सेट पथ कैसे जोड़ें?


187

मूल रूप से, मुझे पता है कि मैं अपने नियंत्रण कक्ष के माध्यम से जा सकता हूं और पथ चर को संशोधित कर सकता हूं। लेकिन, मुझे आश्चर्य है कि क्या बैच प्रोग्रामिंग के माध्यम से एक रास्ता है जिसमें एक अस्थायी रास्ता शामिल है? इस तरह यह केवल उस बैच फ़ाइल निष्पादन के दौरान उपयोग किया जाता है। मैं नहीं चाहता कि लोग मेरे बैच फ़ाइल का उपयोग करने के लिए अपने पाथ वे में बदलाव करें।

जवाबों:


318

बस किसी भी अन्य वातावरण चर, के साथ की तरह SET:

SET PATH=%PATH%;c:\whatever\else

यदि आप पहले से थोड़ी सुरक्षा जांच करवाना चाहते हैं, तो यह देखने के लिए जांचें कि क्या नया पथ पहले मौजूद है:

IF EXIST c:\whatever\else SET PATH=%PATH%;c:\whatever\else

यदि आप चाहते हैं कि उस बैच फ़ाइल के लिए स्थानीय हो, तो उपयोग करें setlocal:

setlocal
set PATH=...
set OTHERTHING=...

@REM Rest of your script

डॉक्स को setlocal/ के लिए ध्यान से पढ़ें endlocal, और उस साइट के अन्य संदर्भों पर एक नज़र डालें - फ़ंक्शंस बहुत दिलचस्प है और वाक्यविन्यास भी मुश्किल है।

सिंटेक्स पेज आप मूल बातें के साथ आरंभ करना चाहिए।


3
यदि आप setlocalअपने बैच फ़ाइल में एक जोड़ते हैं , तो पथ केवल फ़ाइल में दिखाई देता है
jeb

hw क्या आप "सेटलोकल" जोड़ते हैं? क्या वह "सेट" के स्थान पर है?
माइकल

@micheal: लिंक के साथ मेरे जवाब को अपडेट किया गया। कृपया cmd scripting के बारे में कुछ दस्तावेज़ीकरण / उदाहरण / ट्यूटोरियल पढ़ें - SETवास्तव में कुछ है जिसे आपको किसी भी स्क्रिप्टिंग को करने से पहले जानना और समझना चाहिए।
Mat

2
जीवन रक्षक। मुझे एक सर्वर पर ईवी को जोड़ने की आवश्यकता थी जिसे फिर से शुरू नहीं किया जा सकता है और यह मुझे वह करने की अनुमति देता है जो मुझे पुनरारंभ करने की आवश्यकता के बिना करने की आवश्यकता है!
dav_i

8
यहां तक ​​कि इसके बिना SETLOCAL, अधिकतम, केवल उस व्यक्तिगत कमांड प्रॉम्प्ट सत्र के लिए होने जा रहा है - यदि आप एक से अधिक बैच फ़ाइल से कर रहे हैं, और उपयोग कर रहे हैं EXIT /B %N%, तो SETLOCALमूल रूप से स्क्रिप्ट के बाहर निकलने पर आपके परिवर्तनों को डंप करने जा रहा है। : - /
BrainSlugs83

21

एक महत्वपूर्ण विवरण है:

set PATH="C:\linutils;C:\wingit\bin;%PATH%"

काम नहीं करता है, जबकि

set PATH=C:\linutils;C:\wingit\bin;%PATH%

काम करता है। अंतर उद्धरण है!

यूपीडी वेन्यूमस कमेंट भी देखें


3
वास्तव में यह SET "PATH=...%PATH%"मार्ग में मौजूद रिक्त स्थान होना चाहिए और त्रुटियों या दुर्व्यवहार का कारण होगा। इस तरह उद्धरण चिह्नों में लपेटने से उन्हें शामिल नहीं किया जाएगा लेकिन चर को ठीक से सेट किया जाएगा। समान किसी अन्य env वैरिएबल के लिए काम करता है।
वेनीमुस

20

यह सही है, लेकिन यह इसे स्थायी रूप से नहीं बदलता है, लेकिन सिर्फ वर्तमान कमांड प्रॉम्प्ट के लिए, यदि आप इसे स्थायी रूप से बदलना चाहते हैं तो आपको उदाहरण के लिए इसका उपयोग करना होगा:

setx ENV_VAR_NAME "DESIRED_PATH" /m

यह इसे स्थायी रूप से बदल देगा और हाँ आप इसे किसी अन्य बैच स्क्रिप्ट द्वारा अधिलेखित कर सकते हैं।


शायद /mबाद की जरूरत है setx?
सुजानशाक्य

मेरे लिए वही काम करता है, लेकिन यह विन बैच स्क्रिप्टिंग एमएस से थोड़ा अधूरा है। मेरी कंपनी में जहां हमारे पास समान सिस्टम वाले सभी लैपटॉप हैं, वहां PATH सेटिंग के लिए एक सार्वभौमिक स्क्रिप्ट नहीं है और हम उनमें से 2 या 3 को बनाए रख रहे हैं, इसलिए जो कुछ भी आपके लिए काम करता है :)
dumbak

अद्यतन के लिए धन्यवाद। विंडोज सर्वर 2012 में, जब मैंने /mअंत में रखा DESIRED_PATHथा , केवल वर्तमान उपयोगकर्ता के लिए / मी के साथ जोड़ा गया था।
सुजानशाक्य

11
चेतावनी। एक पथ पर सेटेक्स का उपयोग करते हुए, इसे और अधिक जोड़ने की कोशिश की जा रही है, और स्ट्रिंग> 1024 लंबा है, मुझे पता चला कि परिणाम (मेरा वातावरण पथ) स्थायी रूप से काट दिया गया था। (एक अच्छी बात यह है कि मैं% PATH% कॉपी कर सकता था जिसे मैंने बदलाव से पहले ECHOed किया था, और पर्यावरण चर खिड़कियों के उपकरण का उपयोग करके इसे वापस रख दिया।)
एंड्रियास जैन्सन

ध्यान! यह कमांड सिस्टम वातावरण चर को सीधे अधिलेखित करता है! मैंने उन्हें हटा दिया था और उन्हें ठीक करने का प्रयास किया था। और यह गलती करने वाले के लिए भी: अपने कंप्यूटर को पुनरारंभ न करें। लिखें echo %path%और आपको वर्तमान लोडेड पथ मिलेगा। आपको उपयोगकर्ता और सिस्टम वातावरण चर को एक दूसरे से अलग करने की आवश्यकता है। फिर आप मैन्युअल रूप से उन्हें सही जगह पर लागू कर सकते हैं।
Alper
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.