एक प्रविष्टि के साथ PATH चर में एक निर्देशिका और सभी उपनिर्देशिकाएं जोड़ें


19

मुझे अपने होम फ़ोल्डर में एक निर्देशिका मिली है जिसमें मैं कमांड-लाइन सॉफ्टवेयर (CMD_Software) रखता हूं। मैंने अव्यवस्था से बचने के लिए सॉफ़्टवेयर के प्रत्येक टुकड़े को अपनी स्वयं की निर्देशिका में CMD_Software में रखा।

मैं अपने PATH वैरिएबल में एक सिंगल एंट्री करना चाहता हूं जो CMD_Software और कमांड लाइन से सभी निर्देशिकाओं को एक्सेस करने की अनुमति देगा।

मैंने कोशिश की C:\Users\myuser\CMD_Software\*लेकिन उसने कुछ नहीं किया। यही वह बिंदु है जिस पर मैं विचारों से बाहर भागा।

कृपया ध्यान दें कि मैं टर्मिनल में रहते हुए एक नया पथ सेट करने का प्रयास नहीं कर रहा हूं, मैं सिस्टम गुणों के "उन्नत" टैब पर उपलब्ध "पर्यावरण चर" में एक नया पथ सेट करने का प्रयास कर रहा हूं।


क्या आपने `C: \ Users \ myuser \ CMD_Software *` जैसी कोई कोशिश की?
टेराडॉन

4
मुझे नहीं लगता कि यह संभव है।
हैरी जॉनसन

जवाबों:


16

पथ चर वाइल्डकार्ड या पुनरावृत्ति का समर्थन नहीं करता है। यह डिजाइन द्वारा है।

दो संभावित वर्कअराउंड हैं जो मैंने मौके पर उपयोग किए हैं:

  • साधारण बैच फ़ाइलों के साथ एक निर्देशिका बनाएँ और उस निर्देशिका को PATH में जोड़ें। प्रत्येक बैच फ़ाइल उदाहरण के लिए इच्छित प्रोग्राम लॉन्च कर सकती है:

    :: CMD_Software.bat: start CMD_Software
    @C:\Users\myuser\CMD_Software\CMD_Software.exe %*
    

    पहली पंक्ति एक टिप्पणी है, दूसरी शुरुआत @कमांड को दिखाने से बचने के लिए शुरू होती है , और %*EXE में किसी भी कमांड लाइन तर्क को पारित करने के लिए उपयोग की जाती है।

  • CMD.EXE में उपनाम जोड़ें:

    DOSKEY CMD_Software="C:\Users\myuser\CMD_Software\CMD_Software.exe" $*
    

    यह अनिवार्य रूप CMD_Softwareसे समान संकेत के बाद सब कुछ के लिए कमांड प्रॉम्प्ट में अनुवाद करता है। $*आपूर्ति तर्क के साथ बदल दिया है।

मैं दूसरा दृष्टिकोण पसंद करता हूं, क्योंकि आप सभी उपनामों को एक फ़ाइल में समूहित कर सकते हैं (DOSKEY /? में "/ MACROFILE" स्विच देखें) और जब भी कमांड दुभाषिया रजिस्ट्री सेटिंग का उपयोग करना शुरू करे (तब "ऑटोरन" कुंजी का उपयोग कर इसे ऑटोरन करें। सीएमडी /?)।

दूसरी विधि का एक दोष यह है कि उपनाम केवल एक कमांड लाइन की शुरुआत में काम करते हैं। यह एक समस्या हो सकती है यदि आप कमांड को चेन करना चाहते हैं। उदाहरण के लिए, CLS & CMD_Softwareतब तक काम नहीं करेंगे जब तक कि आप कोष्ठक का उपयोग करके एक अलग पंक्ति में उपनाम नहीं डालते:

CLS & (
CMD_Software
)

जब भी यह एक समस्या बन जाती है, तो मैं बैच फ़ाइल के दृष्टिकोण में वापस आ जाता हूं।


धन्यवाद! पहली विधि मेरे लिए वास्तव में अच्छी तरह से काम करती है, ज्यादातर क्योंकि मुझे रजिस्ट्री के साथ गड़बड़ नहीं करना पड़ता है जब मैं कंप्यूटर के बीच अपना डेटा स्थानांतरित करता हूं। यह भी काफी सुव्यवस्थित और सुविधाजनक है क्योंकि आपके पास केवल एक छोटी फ़ाइल बनाने के लिए अधिक समय बिताने के लिए है, जब आप उक्त उपयोगिता प्राप्त करते हैं।
साइबरसिमन

दुर्भाग्यवश मुझे अपने पिछले कथन को जल्दी से फिर से तैयार करना होगा। मैं पहले तरीके को अपनाने के बाद निष्पादन के माध्यम से आधे रास्ते से बाहर निकलने वाली लिपियों के साथ अजीब मुद्दों का सामना कर चुका हूं। विशेष रूप से, विंडोज के लिए wget लगता है कि इसे डाउनलोड करने के बाद मेरी स्क्रिप्ट को मारने का आनंद मिलेगा। मैंने पिछले दो घंटों को व्यर्थ करके अपनी स्क्रिप्ट को समस्याग्रस्त किया है, लेकिन आखिरकार मैंने सभी एक्सिस को एक ही रूट डाइरेक्टरी में फेंकने की कोशिश की, और समस्याएं बस गायब हो गईं। इसलिए मैं दृढ़ता से सलाह दूंगा कि कोई भी इस विधि से सभी को जाने से पहले।
साइबरसिम

4

यह वही है जो मैं समस्या को ठीक करने के लिए उपयोग करता हूं। इस स्क्रिप्ट की प्रतिलिपि बनाएँ और इसे FIXPATH.BATउस फ़ोल्डर में सहेजें , जिसे आपने PATHपर्यावरण चर में जोड़ा है । उदाहरण के लिए:

C: \ Users \ MyUser \ CMD_Software \

अब जब भी आपको एक सबफ़ोल्डर में प्रोग्राम चलाने की आवश्यकता हो, तो कहें ...

C: \ Users \ MyUser \ CMD_Software \ unixutils \ grep.exe
या
C: \ Users \ MyUser \ CMD_Software \ imagetools \ exiftool.exe

fixpathपहले चलाएँ फिर कमांड दर्ज करें (जैसे grepया exiftool) जैसे:

Microsoft Windows [संस्करण 6.3.9600]
(c) 2013 Microsoft Corporation। सभी अधिकार सुरक्षित।

C: \ Users \ MyUser> fixpath
C: \ Users \ MyUser> exiftool


FIXPATH.BAT

सेटलोकल EnableDelayedExpansion
सीडी / डी% ~ dp0

/ R %% d के लिए (।) करते हैं (
    "dirs =! dirs!? %% d" सेट करें
)

पथ =% पथ%! dirs!
(endlocal
    "रेट =% पाथ%" सेट करें
)
cmd / K "शीर्षक [#] पथ निश्चित [#] && पथ% ret%"
बाहर निकलें / बी

@ VonC के उत्तर के लिए धन्यवाद


1

"CMl_Software (या कहीं भी, वास्तव में) के तहत एक" प्रोग्रामलिंक \ "उपनिर्देशिका रखो और प्रत्येक निष्पादन योग्य जिसे आप उपयोग करना चाहते हैं, के लिए प्रतीकात्मक लिंक या हार्डलिंक के साथ भरें। फिर PATH में एक एकल प्रविष्टि ... \ programlinks पर्याप्त होगा।


1
इसके साथ मुख्य समस्या यह है कि यदि कोई पुस्तकालय है कि निष्पादन योग्य संभावित रूप से उसी निर्देशिका में स्थित पर निर्भर करता है, जैसे कि वे उपयोग नहीं किए जाएंगे। या कम से कम यही मेरे प्रयास से हो रहा है।
शून्य

शानदार टिप्पणी, @ जीरो 298। हालांकि मुझे पसंद है, अगर किसी को 100% यकीन है और यह पुष्टि कर सकता है कि यह वास्तव में झंकार को खुश करने के लिए सच है (क्योंकि यह विधि अन्यथा सभी की सबसे शुद्ध है।)
हेनरिक

-1

यदि आप विचार से बहुत दूर नहीं हैं, तो आप अपने कमांड लाइन टूल्स को Windows \ System32 डायरेक्टरी में कॉपी कर सकते हैं। फिर आप उन्हें किसी भी डायरेक्टरी से चला सकते हैं, जैसे पिंग या आईकॉन्फिग।

संपादित करें
थोड़ा सा छेड़छाड़ करने के बाद, यह संभव है। आपको अपनी निर्देशिकाओं का परिसीमन करने के लिए अर्धविराम का उपयोग करने की आवश्यकता है। मान लें कि आपका "folder1" और "folder2" में एक कार्यक्रम था। आप अपना रास्ता इस तरह लिखेंगे:

c:\folder1\;c:\folder2\;c:\folder3\;    etc....

फिर आप कमांड लाइन से सीधे या तो डायरेक्टरी में प्रोग्राम को कॉल कर सकते हैं। AFAIK सिर्फ एक लाइन के साथ ऐसा करने का कोई और तरीका नहीं है।

सहायक जानकारी: http://en.wikipedia.org/wiki/PATH_(variable)


1
यह बहुत मतलब नहीं है। 1. यह पाथ चर के किसी भी पिछले सामग्री को मिटा देगा । 2. PATH वैरिएबल में केवल फ़ोल्डर होगा, इसके उपनिर्देशिका (वांछित परिणाम) नहीं। 3. program.batजैसा %PATH%\program.batकि PATH के लिए डिज़ाइन किया गया है, उससे कम या ज्यादा विपरीत है।
डेनिस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.