2017-03-16 10 views
13

यहां एक साधारण लेकिन परेशान सवाल है।विंडोज अपरिभाषित पर्यावरण चर का उपयोग?

एक अपरिभाषित विंडोज वातावरण चर, कमांड प्रॉम्प्ट विंडो ECHO में उदाहरण

के लिए एबीसी के लिए [% एबीसी%] में [% एबीसी%]

लेकिन एक .cmd बैच फ़ाइल ECHO में [% परिणाम एबीसी%] परिणाम []

अंतर क्यों? मैंने ईसीएचओ कमांड का शोध किया है और इसके बारे में कुछ भी नहीं मिला है। मैं इस बारे में चिंतित हूं कि यह सूक्ष्म अंतर कहां लागू हो सकता है।

+7

यदि आप वास्तव में रुचि रखते हैं, तो [इस उत्तर] (http://stackoverflow.com/a/4095133/6811411) के माध्यम से बैच और cmd लाइन दुभाषिया के आंतरिक पार्सिंग को हाइलाइट करते हुए काम करें। – LotPings

+6

संक्षिप्त संक्षेप में: यह 'ईसीएचओ' कमांड से स्वतंत्र है, विस्तार नियम बैच फ़ाइल संदर्भ – jeb

+2

के साथ cmd संदर्भ से अलग हैं आप कुछ तरीकों से इस बिंदु का अच्छा उपयोग कर सकते हैं। उदाहरण के लिए, कमांड प्रॉम्प्ट पर: '% a in (* .txt) के लिए @set "var =% a" करें और इको फ़ाइल कॉल करें:% var% '। याद रखें कि इस काम के लिए 'var' चर को अनिर्धारित किया जाना चाहिए ... – Aacini

उत्तर

1

वास्तव में अच्छा सवाल है! उलझन में हुह?

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

this excellent answer से

उद्धरण:

BatchLineParser - बैच फ़ाइलों के अंदर पार्सर, लाइनों या ब्लॉक

CmdLineParser के लिए - BatchLineParser की तरह, लेकिन सीधे कमांड प्रॉम्प्ट पर, काम करता है विभिन्न

मुख्य अंतर पार्सिंग के पहले चरण में है, विशेष रूप से %var% का विस्तार:

BatchLineParser में अगर var मौजूद है, कुछ भी नहीं के साथ बदल दिया है नहीं होगा जा CmdLineParser में अगर var परिभाषित नहीं है, अभिव्यक्ति बदलाव नहीं होगा।

तो किसी ने इसे इस तरह क्यों डिजाइन किया? मुझे बिल्कुल पता नहीं है।

संबंधित मुद्दे