2010-11-18 11 views
8

मैं एक बैच फ़ाइल है कि मैं आम तौर पर इस तरह आह्वान किया है में एक cmd.exe बैच फ़ाइल को चलाने के लिए कैसे:एक उप खोल

longjob.cmd >result.txt 2>&1 

यह ठीक काम करता है, लेकिन स्क्रिप्ट मेरी खोल छोड़ने इसके निष्पादन के दौरान निर्देशिका में परिवर्तन उस निर्देशिका में - जो एक उपद्रव है।

क्या उप-शैल के भीतर कमांड चलाने का कोई तरीका है - जबकि अभी भी आउटपुट को कैप्चर करने की इजाजत है?

मैं

cmd longjob.cmd >result.txt 2>&1 

जो सिर्फ एक निकास आदेश के लिए इंतज़ार कर बैठता है की कोशिश की है।

इसके अलावा, मैं

start longjob.cmd >result.txt 2>&1 

जो स्क्रिप्ट चलाने करता कोशिश की, लेकिन एक नई विंडो में और सभी आउटपुट फ़ाइल के बजाय खिड़की करने के लिए भेजा जाता है।

+0

इस से निपटने का सबसे आसान तरीका वास्तव में बैच फ़ाइल को ठीक करना है। 'pushd' /' popd' यहां सहायता के हैं। जब तक बैच फ़ाइल का उद्देश्य निर्देशिका को बदलना नहीं है, तब तक मैं कभी भी ऐसा नहीं लिखूंगा जो किसी अन्य निर्देशिका में शुरू होता है। – Joey

+0

उदाहरण के लिए बैच फ़ाइल को रद्द करने के बारे में क्या है। बैच फ़ाइल रद्द होने के बावजूद मूल कार्य निर्देशिका को पुनर्स्थापित करने का कोई समझदार तरीका है? – bambams

उत्तर

12

प्रयास करें

CMD /C longjob.cmd >result.txt 2>&1 

सुनिश्चित नहीं हैं कि यह कैसे पुनर्निर्देशन के साथ सौदा होगा, लेकिन अध्यक्ष एवं प्रबंध निदेशक/सी आप सीएमडी बताओ क्या चलाने के लिए और जब किया यह बाहर निकलने चाहिए कि सुविधा देता है। (सीएमडी/के आपको इसे चलाने के लिए कहने देता है लेकिन पूरा होने पर चारों ओर चिपक जाता है।) यदि एक के भीतर चलाया जाता है तो यह मौजूदा कंसोल विंडो का पुन: उपयोग करेगा।

+0

"cmd/c" चाल चल रहा है। बहुत धन्यवाद। – Martin

+0

बिल्कुल विपरीत, लियो: '/ c' कमांड चलाने के बाद मौजूद है, '/ k' आपको बाद में संकेत देगा। – Joey

+0

हाँ, मुझे सी और के आसपास गलत रास्ता मिला। सही करने के लिए संपादित किया गया। –

0

call आदेश आप जो चाहते हैं वह हो सकता है।

अर्थात

call longjob.cmd >result.txt 2>&1 
+1

यदि longjob.cmd chdir को कॉल करता है, कॉल के साथ उपयोग किए जाने पर स्क्रिप्ट समाप्त होने पर कॉलिंग खोल उस निर्देशिका में छोड़ी जाती है। – Martin

+0

कॉल स्क्रिप्ट को एक अलग प्रक्रिया (उप-खोल) में चलाने के लिए प्रकट नहीं होता है। यह निष्पादन से साइड इफेक्ट्स (निर्देशिका परिवर्तन, पर्यावरण परिवर्तनीय संशोधन इत्यादि) छोड़कर वर्तमान प्रक्रिया में स्क्रिप्ट निष्पादित करता है। – Nathan