CMD: इसे बिना डुप्लीकेट किए पथ पर ले जाएं?


12

एक CMDसत्र के लिए मैं आसानी से एक नया रास्ता तय कर सकता हूं:SET PATH=%PATH%;"insert custom path here"

एक बैच फ़ाइल में ऐसा करने पर विचार नहीं करता है कि क्या कस्टम पथ पहले से ही शामिल है। मैं इसे डुप्लिकेट करने से कैसे बच सकता हूं (यानी यह जांचें कि यह पहले से ही "स्ट्रिंग" में निहित है)।

टिप्पणियों:

  1. संबंधित: मैं विंडोज 7 में सिस्टम चर पथ के लिए उपयोगकर्ता-परिभाषित पर्यावरण चर कैसे जोड़ सकता हूं?
  2. संबंधित: मैं स्थायी रूप से कमांड लाइन के माध्यम से सिस्टम के पैठ चर में प्रविष्टि कैसे जोड़ सकता हूं?
  3. UNIX के लिए समान प्रश्न: यदि पहले से ही नहीं है तो $ PATH में निर्देशिका जोड़ें
  4. कुछ "सीएमडी" स्ट्रिंग ऑप्स ने समझाया: http://ss64.com/nt/syntax-replace.html

यह ध्यान दिया जाना चाहिए कि इस संदर्भ में दोहराव हानिरहित है। इससे बचने की कोशिश करने और झूठे सकारात्मक के जोखिम को पेश करने की तुलना में दोहराव की अनुमति देने के लिए संभवतः अधिक समझदार होगा।
हैरी जॉनसन

जवाबों:


14

मैडहैकर जवाब के समान, बस अधिक कॉम्पैक्ट।
echo %path%|find /i "%np%">nul || set path=%path%;%np%

%np%आपका नया रास्ता है, बेशक आप इसके बजाय शाब्दिक का उपयोग कर सकते हैं। यह क्या करता है: echo %path%|find /i "%np%">nulएक स्ट्रिंग के लिए मौजूदा पथ को खोजता है, आउटपुट को त्यागता है। ||इसका मतलब है कि विफलता पर अमल, इसलिए इसका मतलब है: स्ट्रिंग के लिए खोज पथ जोड़ा जाना है, और यदि नहीं मिला है, तो इसे जोड़ें।

संपादित करें: आम तौर पर उन रास्तों को खाली करने के लिए पथों की आवश्यकता नहीं होती है, लेकिन यदि आप उन्हें उद्धृत करना चाहते हैं , तो यह संस्करण दोहरे उद्धृत पथों के साथ काम करेगा:
echo %path%|find /i "%np:"=%">nul || set path=%path%;%np%

संपादित करें: findstr /i /c:के find /iरूप में बदल गया findstrकुछ टिप्पणियों में KubaOber द्वारा उल्लेख के रूप में गलत तरीके से व्याख्या कर सकते हैं


अच्छा, मुझे पता था कि ऐसा करने के लिए एक क्लीनर तरीका था ... अभी भी बैश पसंद करते हैं, लेकिन यह सिर्फ मेरे लिए है: मदद के लिए धन्यवाद!
मैडहैकर

अच्छा लगा, लेकिन क्या यह रास्ते में रिक्त स्थान के साथ काम करता है? मैंने अपने विशेष रास्तों से इसका परीक्षण किया है, "उद्धृत और रिक्त स्थान के साथ" फिर से जुड़ जाता है। एक ही उद्धृत लेकिन कोई रिक्त स्थान काम नहीं करता है।
होर्स्ट वाल्टर

1
@HorstWalter हाँ, इसे किसी भी पथ के साथ काम करना चाहिए (मैंने अभी रिक्त स्थान सहित कुछ के साथ जाँच की है)। "उद्धृत" से आपका क्या तात्पर्य है? आपको रास्तों में, यहां तक ​​कि रिक्त स्थान वाले उद्धरणों का उपयोग करने की आवश्यकता नहीं है। यदि आपके %np%उद्धरण शामिल हैं - हाँ, यह दुर्व्यवहार का कारण होगा।
wmz

2
@HorstWalter मेरा संपादन देखें यह केवल एक मुद्दा है यदि आप चर का उपयोग करते हैं, तो शाब्दिक (जैसा कि echo %path%|findstr /i /c:"my path">nul || set path=%path%;"my path") का उपयोग करके ठीक काम करना चाहिए।
wmz

1
@wmz echo d\. | findstr /c:"d\."विफल रहता है, लेकिन echo d\. | find "d\."सफल होता है
मोनिका

4

मुझे पता है कि यह गंदा है, लेकिन यह काम करना चाहिए:

 SET PATH=$(echo $PATH | awk -F"%checkstr%" '{ print ($(NF-1) ~ 0) ? $PATH:%newpath% : $PATH; }')

%checkstr%पथ में जाँच करने के लिए स्ट्रिंग कहाँ है और %newpath%वर्तमान पथ में संलग्न करने के लिए नया पथ है

आशा है कि मदद करता है, और मुझे यकीन है कि वहाँ एक आसान तरीका है, लेकिन वह अभी के लिए चाल करना चाहिए।

संपादित करें

इसलिए यदि आप Windows में UNIX टूल नहीं जोड़ना चाहते हैं, तो आप इस बैच सिंटैक्स को आज़मा सकते हैं:

echo %PATH% | find /C /I "<string to find>" > out.txt 
set /p dne= < out.txt
if 0 EQU %dne% (set PATH=%PATH%;"<custom path>")
del out.txt

यूजी, कोई प्रीटीयर नहीं है, और एक लाइन के रूप में किया जा सकता है यदि आप पाईप के लिए कमांड प्राप्त कर सकते हैं, तो स्टेटमेंट में एक उपकमांड के रूप में काम करने के लिए ...


2

स्क्रिप्ट "wmz" के उत्तर के आधार पर:

@ECHO off
ECHO java_home=%JAVA_HOME%
SET javapath=%JAVA_HOME%\bin
ECHO %path%|findstr /i /c:"%javapath:"=%">nul || set path=%path%;%javapath%
ECHO Path=%path%
PAUSE
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.