विंडोज़ पर आपके द्वारा चलाए जाने वाले कमांड या बैच जॉब के व्यवहार को लॉग और समस्या निवारण करने के सबसे उपयोगी तरीकों में से एक है आउटपुट को फ़ाइल में रीडायरेक्ट करना।
हालाँकि, कुछ अलग तरीके हैं जिनसे आप कमांड लाइन राइट्स को फ़ाइल में रीडायरेक्ट कर सकते हैं। आपके द्वारा चुना गया विकल्प इस बात पर निर्भर करता है कि आप अपने कमांड आउटपुट को कैसे देखना चाहते हैं।
Windows कमांड प्रॉम्प्ट आउटपुट कैसे काम करता है
जब आप विंडोज कंसोल (कमांड प्रॉम्प्ट) में एक कमांड टाइप करते हैं, तो उस कमांड का आउटपुट दो अलग-अलग स्ट्रीम में जाता है।
- STDOUT :स्टैंडर्ड आउट वह जगह है जहां कमांड से कोई भी मानक प्रतिक्रिया होती है। उदाहरण के लिए डीआईआर कमांड के लिए मानक प्रतिक्रिया एक निर्देशिका के अंदर फाइलों की एक सूची है।
- एसटीडीईआरआर :मानक त्रुटि वह है जहां आदेश के साथ कोई समस्या होने पर कोई त्रुटि संदेश जाता है। उदाहरण के लिए यदि निर्देशिका में कोई फ़ाइल नहीं है, तो DIR कमांड मानक त्रुटि स्ट्रीम में "फ़ाइल नहीं मिली" आउटपुट करेगा।
आप इन दोनों आउटपुट स्ट्रीम के लिए आउटपुट को विंडोज़ में एक फ़ाइल में रीडायरेक्ट कर सकते हैं।
मानक आउटपुट लिखें को नई फ़ाइल में पुनर्निर्देशित करें
किसी कमांड के मानक आउटपुट को फ़ाइल में पुनर्निर्देशित करने के दो तरीके हैं। पहला यह है कि हर बार जब आप कमांड चलाते हैं तो कमांड आउटपुट राइट को एक नई फाइल में भेजें।
ऐसा करने के लिए, कमांड प्रॉम्प्ट खोलें और टाइप करें:
dir test.exe > myoutput.txt
> वर्ण कंसोल को STDOUT . आउटपुट करने के लिए कहता है फ़ाइल में आपके द्वारा प्रदान किए गए नाम के साथ।
जब आप इस कमांड को चलाते हैं, तो आप देखेंगे कि कमांड विंडो में इस त्रुटि के अलावा कोई प्रतिक्रिया नहीं है कि फ़ाइल मौजूद नहीं है।
ऐसा इसलिए है क्योंकि कमांड के लिए मानक आउटपुट myoutput.txt नामक फ़ाइल पर पुनर्निर्देशित किया गया था। फ़ाइल अब उसी निर्देशिका में मौजूद है जहाँ आपने कमांड चलाया था। मानक त्रुटि आउटपुट अभी भी सामान्य रूप से प्रदर्शित होता है।
नोट :कमांड चलाने से पहले कमांड प्रॉम्प्ट के लिए सक्रिय निर्देशिका को बदलने के लिए सावधान रहें। इस तरह आपको पता चल जाएगा कि आउटपुट फ़ाइलें कहाँ संग्रहीत हैं।
आप कमांड विंडो में "myoutput.txt" टाइप करके फ़ाइल में गए मानक आउटपुट को देख सकते हैं। यह आपके डिफ़ॉल्ट टेक्स्ट फ़ाइल व्यूअर में टेक्स्ट फ़ाइल को खोलेगा। ज्यादातर लोगों के लिए, यह आमतौर पर Notepad.exe होता है।
अगली बार जब आप वही आदेश चलाएंगे, तो पिछली आउटपुट फ़ाइल हटा दी जाएगी। नवीनतम कमांड के आउटपुट के साथ एक नई आउटपुट फ़ाइल को फिर से बनाया जाएगा।
मानक आउटपुट राइट्स को उसी फ़ाइल में रीडायरेक्ट करें
क्या होगा यदि आप उसी फ़ाइल को अधिलेखित नहीं करना चाहते हैं? एक अन्य विकल्प आउटपुट फ़ाइल पर रीडायरेक्ट करने के लिए> के बजाय>> का उपयोग करना है। इस उदाहरण के मामले में, आप टाइप करेंगे:
dir test.exe >> myoutput.txt
आपको वही आउटपुट (केवल त्रुटि) दिखाई देगा।
लेकिन इस मामले में, आउटपुट फ़ाइल को अधिलेखित करने के बजाय, यह कमांड नए आउटपुट को मौजूदा आउटपुट फ़ाइल में जोड़ देता है।
हर बार जब आप कोई कमांड चलाते हैं और आउटपुट को किसी फ़ाइल में जोड़ते हैं, तो यह मौजूदा फ़ाइल के अंत में नया मानक आउटपुट लिखेगा।
मानक त्रुटि को किसी फ़ाइल में पुनर्निर्देशित करें
जिस तरह आप मानक आउटपुट राइट को किसी फ़ाइल में रीडायरेक्ट कर सकते हैं, उसी तरह आप किसी फ़ाइल में मानक त्रुटि स्ट्रीम को आउटपुट भी कर सकते हैं।
ऐसा करने के लिए, आपको 2> . जोड़ना होगा कमांड के अंत तक, उसके बाद आउटपुट त्रुटि फ़ाइल जिसे आप बनाना चाहते हैं।
इस उदाहरण में, आप कमांड टाइप करेंगे:
dir test.exe > myoutput.txt 2> output.err
यह मानक आउटपुट स्ट्रीम को myoutput.txt पर भेजता है, और मानक त्रुटि स्ट्रीम को output.err पर भेजता है। नतीजा यह है कि कंसोल विंडो में कोई आउटपुट स्ट्रीम बिल्कुल भी प्रदर्शित नहीं होती है।
हालांकि, आप output.err . लिखकर त्रुटि संदेश देख सकते हैं . यह फ़ाइल को आपके डिफ़ॉल्ट टेक्स्ट फ़ाइल व्यूअर में खोल देगा।
जैसा कि आप देख सकते हैं, कमांड से कोई भी त्रुटि संदेश त्रुटि फ़ाइल में आउटपुट होता है। मानक आउटपुट की तरह ही, आप >> . का उपयोग कर सकते हैं इसके बजाय त्रुटि को पहले से चलाए गए कमांड से त्रुटियों में जोड़ने के लिए।
सभी आउटपुट राइट्स को एक ही फाइल पर रीडायरेक्ट करें
उपरोक्त सभी दृष्टिकोणों का परिणाम कई फाइलों में होता है। एक फ़ाइल मानक आउटपुट स्ट्रीम के लिए है और दूसरी मानक त्रुटि स्ट्रीम के लिए है।
यदि आप इन दोनों आउटपुट को एक ही फाइल में शामिल करना चाहते हैं, तो आप ऐसा भी कर सकते हैं। ऐसा करने के लिए, आपको बस निम्न आदेश का उपयोग करके सभी आउटपुट को एक ही फ़ाइल में पुनर्निर्देशित करना होगा।
dir test.exe 1> myoutput.txt 2>&1
यहां बताया गया है कि यह कमांड कैसे काम करता है:
- मानक आउटपुट को आउटपुट नंबर 1 द्वारा पहचानी गई आउटपुट फ़ाइल की ओर निर्देशित किया जाता है।
- नंबर 2 द्वारा पहचाने गए मानक त्रुटि आउटपुट को नंबर 1 द्वारा पहचानी गई आउटपुट फ़ाइल पर पुनर्निर्देशित किया जाता है।
यह त्रुटि आउटपुट को मानक आउटपुट के अंत में जोड़ देगा।
यह किसी भी कमांड के सभी आउटपुट को एक फाइल में देखने का एक उपयोगी तरीका है।
मानक या त्रुटि आउटपुट स्ट्रीम को शांत करना
आप फ़ाइल के बजाय आउटपुट को NUL पर रीडायरेक्ट करके मानक आउटपुट या मानक त्रुटि को भी बंद कर सकते हैं।
उपरोक्त उदाहरण का उपयोग करते हुए, यदि आप केवल मानक आउटपुट चाहते हैं और कोई मानक त्रुटि बिल्कुल नहीं चाहते हैं, तो आप निम्न आदेश का उपयोग कर सकते हैं:
dir test.exe 1> myoutput.txt 2>nul
यह उसी आउटपुट फ़ाइल में परिणत होगा जो ऊपर पहले उदाहरण के रूप में है जहां आपने केवल मानक आउटपुट को पुनर्निर्देशित किया था, लेकिन इस आदेश के साथ त्रुटि कंसोल के अंदर प्रतिध्वनित नहीं होगी। यह त्रुटि लॉग फ़ाइल भी नहीं बनाएगा।
यह उपयोगी है यदि आप किसी भी त्रुटि की परवाह नहीं करते हैं और नहीं चाहते कि वे एक उपद्रव बनें।
आप BAT फ़ाइल के अंदर से ऊपर दिए गए समान आउटपुट कमांड में से कोई भी प्रदर्शन कर सकते हैं और उस लाइन से आउटपुट आपके द्वारा निर्दिष्ट आउटपुट फ़ाइल में जाएगा। यह देखने का एक उपयोगी तरीका है कि क्या BAT फ़ाइल में किसी भी कमांड को चलाने का प्रयास करते समय कोई त्रुटि थी।