विंडोज़ बैच फ़ाइल को किसी दूसरे से या प्रॉम्प्ट से कॉल करने के कई तरीके। कौन सा किस मामले में?


92

विंडोज़ बैच फ़ाइल ( called.batया called.cmd) को किसी अन्य बैच फ़ाइल ( caller.batया caller.cmd) या इंटरैक्टिव cmd.exe प्रॉम्प्ट से कई तरीकों से बुलाया जा सकता है:

  1. प्रत्यक्ष कॉल: called.bat
  2. कॉल कमांड का उपयोग करना: call called.bat
  3. cmd कमांड का उपयोग करना: cmd /c called.bat
  4. स्टार्ट कमांड का उपयोग करना: start called.bat

मैं उनकी मदद पाठ के आधार पर उनके इच्छित उपयोग को अलग करने के लिए काफी परेशानी में हूँ: कब किसका उपयोग करना है? उदाहरण के लिए, मैं डायरेक्ट कॉल के बजाय 'कॉल' कमांड का उपयोग क्यों कर सकता हूं। क्या अलग है?

मुझे कुछ सारांश रिपोर्ट पर दिलचस्पी है, जो विभिन्न दृष्टिकोणों से सभी 4 संभावनाओं (और यदि कोई लापता है) का विश्लेषण करती हैं: अनुशंसित उपयोग के मामले हैं जिनके लिए उन्हें फिट करने की प्रक्रिया, स्पॉनिंग, निष्पादन संदर्भ, पर्यावरण, रिटर्न कोड प्रसंस्करण।

नोट: मैं Windows XP SP3 का उपयोग कर रहा हूं।

जवाबों:


101
  1. बैच फ़ाइल को वर्तमान cmd.exe इंस्टेंस (या यदि कोई नया cmd.exe उदाहरण, उदाहरण के लिए, एक्सप्लोरर में डबल-क्लिक किया जाता है) द्वारा निष्पादित किया जाएगा।

  2. # 1 के रूप में भी, केवल एक प्रभाव है जब एक बैच / cmd फ़ाइल के अंदर उपयोग किया जाता है। एक बैच फ़ाइल में, 'कॉल' के बिना, मूल बैच फ़ाइल समाप्त हो जाती है और नियंत्रण बैच फ़ाइल को पास करता है; 'कॉल' के साथ चाइल्ड बैच फाइल चलती है, और कॉल के बाद स्टेटमेंट के साथ पैरेंट बैच फाइल जारी रहती है।

  3. बैच फ़ाइल को एक नए cmd.exe उदाहरण में चलाता है।

  4. प्रारंभ एक नई cmd.exe आवृत्ति में एक नई विंडो में बैच फ़ाइल चलाएगा, और कॉलर पूरा होने की प्रतीक्षा नहीं करेगा।


7
विकल्प 4 के लिए ध्यान दें, स्टार्ट कमांड को हमेशा एक 'शीर्षक' द्वारा अनुसरण किया जाना चाहिए , इसलिए यदि आपको एक शीर्षक की आवश्यकता नहीं है, तो आपको खाली दोहरे उद्धरण चिह्नों की आवश्यकता होनी चाहिए, जैसेstart "" [options] command
Daryn

@Daryn जो लिंक केवल उल्लेख करता है कि आपके पास हमेशा एक होना चाहिए, लेकिन यहां तक ​​कि कहते हैं कि Microsoft पैरामीटर को वैकल्पिक बताता है। वे मुझे यह बताने में विफल हैं कि यह "आवश्यक" क्यों होना चाहिए। यहां तक ​​कि तल पर उनके कई उदाहरण शीर्षक पैरामीटर को छोड़ देते हैं।
एडम प्लॉकर

5

यहां टिप्पणियों में से एक बात स्पष्ट नहीं है: जब आप केवल अपने नाम (मूल प्रश्न में केस # 1) का उपयोग करके एक बैच फ़ाइल को दूसरे से कॉल करते हैं, तो कॉलिंग बैच फ़ाइल से निष्पादन बंद हो जाता है। उदाहरण के लिए, इन पंक्तियों में:

called.bat
echo Hello

'इको हैलो' लाइन (और इसके बाद कुछ भी) को नहीं कहा जाएगा। यदि आप 'कॉल' कीवर्ड का उपयोग करते हैं, तो कॉल के बाद निष्पादन शुरू हो जाता है। तो इस मामले में:

call called.bat
echo Hello

The इको हैलो ’लाइन को कहा जाएगा।

इसके अतिरिक्त, call.bat फ़ाइल में सेट किए गए सभी चर वापस कॉलिंग प्रक्रिया में भी पास हो जाएंगे।

इस लाइन में एक '' call.bat '' फ़ाइल की कल्पना करें:

set MYVAR=hello

यदि कॉल किया जाता है तो% MYVAR% कॉलिंग बैच फ़ाइल के लिए उपलब्ध होगा:

call called.bat

लेकिन, इसका उपयोग नहीं किया जाएगा

REM starts a new cmd.exe process
start called.bat   

REM stops and replaces current cmd.exe process with a new one
called.bat        
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.