2010-05-05 1 views
5

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

\Microsoft was unexpected at this time. 

_OLD_VIRTUAL_PATH एक चर है कि मूल रूप PATH से स्थापित किया गया था और यह रिक्त स्थान शामिल हैं:

if defined _OLD_VIRTUAL_PATH (
    set PATH=%_OLD_VIRTUAL_PATH% 
) 

जब मैंने इसे चलाने के लिए और _OLD_VIRTUAL_PATH सेट किया गया है मैं: समस्याग्रस्त स्क्रिप्ट इस तरह दिखता है बहुत यकीन है कि समस्या है। लेकिन समाधान क्या है? अगर मैं इसे उद्धरण में संलग्न करता हूं तो यह सफलतापूर्वक चलता है, लेकिन मुझे नहीं लगता कि PATH वैरिएबल का पूरा मूल्य उद्धरणों में होना चाहिए।

उत्तर

7

आपकी समस्या यहां रिक्त स्थान नहीं बल्कि एक समापन कोष्ठक है। आप शायद 64-बिट सिस्टम चला रहे हैं जहां 32-बिट अनुप्रयोगों के लिए प्रोग्राम फ़ाइलें निर्देशिका Program Files (x86) है। बैच फ़ाइल में एक कोष्ठक ब्लॉक में, समापन कोष्ठक ब्लॉक को समाप्त करता है, इसलिए शेष रेखा सिंटैक्स त्रुटि का कारण बनती है।

1) उद्धरण में पूरा set तर्क रखो:

आपको इसे ठीक करने दो तरीके हैं। इस कारण समापन कोष्ठक ब्लॉक के अंत के रूप में मान्यता नहीं दी जानी करने के लिए:

if defined _OLD_VIRTUAL_PATH set PATH=%_OLD_VIRTUAL_PATH% 
+0

वाह - मैंने आज 2 चीजें सीखीं ... मुझे यकीन था कि यह वाक्यविन्यास उड़ाएगा, लेकिन यकीन है कि यह काम करता है। हालांकि, मुझे यकीन नहीं है कि इव्गेनी के लिए इसकी आवश्यकता क्यों होगी - रिक्त स्थान के साथ एक पथ स्थापित करना उद्धरणों के बिना मेरे लिए कभी भी समस्या नहीं रही है। शायद Evgeny के '_OLD_VIRTUAL_PATH' में कुछ अन्य विशेष चरित्र (एक स्पेस के अलावा) है जिसे उद्धरण की आवश्यकता है? –

+2

@ माइकल: यह ऐसी जगह नहीं है जो समस्या है। मैं पोस्ट को फिर से लिखता हूं (उम्मीद है कि क्रिस दिमाग में नहीं है; यदि आवश्यक हो तो वह वापस रोल कर सकता है) और समझाया कि क्या गलत है और क्यों। – Joey

+0

धन्यवाद जोहान्स, मैं कारण भूल गया था, लेकिन यह निश्चित रूप से समझ में आता है। –

0

खैर - मैं कभी नहीं अभी तक cmd लिपियों में defined ऑपरेशन के बारे में जानता था ...

आपकी स्क्रिप्ट मेरे लिए ठीक काम करने के लिए लगता है - जो लाइन वास्तव में त्रुटि उत्पादन किया जाता है?

तुम भी कोशिश कर सकते हैं:

if not "%_OLD_VIRTUAL_PATH%" == "" (
    set PATH=%_OLD_VIRTUAL_PATH% 
) 

और विश्वास है मुझे, यदि आप Windows cmd पटकथा की उम्मीद कर यह क्या आप पार्टी में है ऐसा कुछ होने के लिए में आ रहे हैं, अपने सिर दर्द में बहुत ज्यादा हो जाएगा, बहुत जल्द। यदि आप cmd स्क्रिप्टिंग पूर्ण आवश्यकता नहीं है तो हो सकता है कि आप कुछ अन्य स्क्रिप्टिंग भाषा (पावरशेल, पायथन, PERL - कुछ भी) का उपयोग करना चाहें। सबसे बड़ी बात (शायद एकमात्र चीज) कि cmd स्क्रिप्टिंग इसके लिए जा रही है कि यह पहले से ही हर विंडोज बॉक्स पर स्थापित है।

+0

कमान एक्सटेंशन में एक "परिभाषित" ऑपरेटर नहीं है - कि लाइन काम करता है:

if defined _OLD_VIRTUAL_PATH ( set "PATH=%_OLD_VIRTUAL_PATH%" ) 

2) एक ब्लॉक का प्रयोग न करें ठीक। यह 'सेट' लाइन है जो विफल हो जाती है। – EMP

+0

सेट कमांड मेरे लिए ठीक काम करता है, यहां तक ​​कि '_OLD_VIRTUAL_PATH' में रिक्त स्थान के साथ भी। '_OLD_VIRTUAL_PATH' वास्तव में क्या सेट है? क्या आपकी स्क्रिप्ट ठीक उसी तरह स्वरूपित है जैसे आपके पास यह प्रश्न है (cmd.exe वाक्यविन्यास के बारे में बहुत पसंद कर सकता है, और हमेशा एक सहज तरीके से नहीं)। –