मैं एक .BAT स्क्रिप्ट को कैसे डीबग कर सकता हूं?


96

वहाँ एक .bat स्क्रिप्ट के माध्यम से कदम का एक तरीका है? बात यह है कि, मेरे पास एक बिल्ड स्क्रिप्ट है, जो बहुत सारी अन्य स्क्रिप्ट्स को कॉल करती है, और मैं यह देखना चाहूंगा कि उन्हें किस क्रम में बुलाया जाता है, ताकि मुझे पता चल सके कि वास्तव में मुझे कहाँ जाना है और अपने संशोधनों को जोड़ना होगा ।


4dos में डीबगर में एक बिल्ड है।

जवाबों:


69

मैं एक .bat फ़ाइल के निष्पादन के माध्यम से कदम रखने के लिए वैसे भी नहीं जानता, लेकिन आप उपयोग कर सकते हैं echoऔर pauseडीबगिंग के साथ मदद कर सकते हैं ।

ECHO
बैच फ़ाइल में एक संदेश प्रतिध्वनित करेगा। जैसे ईसीएचओ हैलो वर्ल्ड निष्पादित होने पर स्क्रीन पर हैलो वर्ल्ड प्रिंट करेगा। हालाँकि, बैच फ़ाइल की शुरुआत में @ECHO के बिना आपको "ECHO Hello World" और "Hello World" भी मिलेगा। अंत में, यदि आप एक रिक्त रेखा बनाना चाहते हैं, तो ECHO टाइप करें। अंत में अवधि जोड़ने से एक खाली रेखा बन जाती है।

PAUSE
जारी रखने के लिए किसी भी कुंजी को दबाने के लिए उपयोगकर्ता को प्रेरित करें।

स्रोत: बैच फ़ाइल मदद

@ workmad3: उत्तर में echoकमांड के साथ काम करने के लिए अधिक अच्छे सुझाव हैं ।

एक अन्य सहायक संसाधन ... DDB: डॉस बैच फाइल टिप्स


1
मुझे लगता है कि वे मेरे एकमात्र विकल्प हैं।
Vhaerun

18

सुनिश्चित करें कि लिपियों में कोई 'इको ऑफ' स्टेटमेंट नहीं हैं और किसी भी मिस्ड को रीसेट करने के लिए प्रत्येक स्क्रिप्ट को कॉल करने के बाद 'इको ऑन' पर कॉल करें।

कारण यह है कि यदि प्रतिध्वनि को छोड़ दिया जाता है, तो कमांड दुभाषिया इसे निष्पादित करने से पहले प्रत्येक कमांड (पैरामीटर प्रोसेसिंग के बाद) आउटपुट देगा। यह उत्पादन में उपयोग करने के लिए बहुत बुरा लगता है, लेकिन डिबगिंग उद्देश्यों के लिए बहुत उपयोगी है क्योंकि आप देख सकते हैं कि आउटपुट गलत हो गया है।

इसके अलावा, सुनिश्चित करें कि आप ErrorLevels को बैच स्क्रिप्ट और प्रोग्राम द्वारा सेट की जाँच कर रहे हैं। याद रखें कि इसके लिए .bat फ़ाइलों में 2 अलग-अलग विधियों का उपयोग किया गया है। यदि आप एक प्रोग्राम कहते हैं, तो त्रुटि स्तर% ERRORLEVEL% में है, जबकि बैच फ़ाइलों से ErrorLevel चर में त्रुटि स्तर वापस आ जाता है और इसके आसपास% s की आवश्यकता नहीं होती है।


13

इसी तरह की चिंता का सामना करते हुए, मुझे एक तुच्छ Google खोज के साथ निम्नलिखित टूल मिला:

JPSoft के " टेक कमांड " में एक बैच फ़ाइल IDE / डीबगर शामिल है। उनकी लघु प्रस्तुति वीडियो इसे अच्छी तरह से प्रदर्शित करती है।

मैं कुछ घंटों से परीक्षण संस्करण का उपयोग कर रहा हूं। यहाँ मेरी पहली विनम्र राय है:

  • एक तरफ, यह वास्तव में डिबगिंग .bat और .cmd स्क्रिप्ट की अनुमति देता है और मैं अब आश्वस्त हूं कि यह काफी कुछ मामलों में मदद कर सकता है
  • दूसरी ओर, यह कभी-कभी अवरुद्ध हो जाता है और मुझे इसे मारना पड़ता है ... विशेष रूप से जब सदस्यता डिबगिंग (हमेशा व्यवस्थित रूप से नहीं) .. तो यह "कॉल स्टैक" नहीं दिखाता है और न ही "स्टेप आउट" बटन।

यह एक कोशिश है।


1
यह शायद एक टिप्पणी होनी चाहिए
केलीमेट

8
@KyleMit आप कृपया समझा सकते हैं क्यों? क्योंकि यह एक स्टैंडअलोन समाधान दूसरों से अलग है और जो मूल प्रश्न का उत्तर देता है? यह नहीं है क्योंकि यह एक टिप्पणी में फिट करने के लिए पर्याप्त है, कि यह है ..
Myobis

1
मेरा वास्तव में इसका मतलब शायद था , कि वह किसी भी तरह से जा सकता है। लेकिन यह एक तरह से lmgtfy जवाब है। से सहायता केंद्र जवाब अनुभाग: Always quote the most relevant part of an important link। लिंक के बिना, यह उत्तर भंग हो जाता है, जो, फिर से, शायद ठीक है, लेकिन आम तौर पर इस तरह का एक गैर-परीक्षण, मालिकाना सॉफ्टवेयर का तदर्थ सुझाव आमतौर पर एक टिप्पणी में सबसे अच्छा फिट होगा। बेझिझक इसे छोड़ दें।
काइलमिट

8

मुझे 'रनिंग स्टेप्स' (win32) सॉफ्टवेयर मिला, जिसे मैं देख रहा था: http://www.steppingsoftware.com/

आप आउटपुट और पर्यावरण चर को देखते हुए इसके माध्यम से एक बैट फाइल लोड कर सकते हैं, ब्रेकपॉइंट लगा सकते हैं / उसके माध्यम से आगे बढ़ सकते हैं।

मूल्यांकन संस्करण केवल 50 लाइनों के माध्यम से कदम रखने की अनुमति देता है ... क्या किसी के पास समान कार्यक्षमता के साथ एक मुफ्त विकल्प है?


7
उन्होंने वह डोमेन खो दिया है और संभवतः व्यवसाय से बाहर चले गए हैं। आप अभी भी web.archive.org/web/20120421211043/http://… से मूल्यांकन सॉफ्टवेयर डाउनलोड कर सकते हैं, लेकिन अब लाइसेंस नहीं खरीद सकते।
Twasbrillig

6

@ECHO से बाहर निकलें और अपने बैच फ़ाइल को पुर्ननिर्देशित करें सभी आउटपुट को लॉग फ़ाइल में ।।

c:> yourbatch.bat (वैकल्पिक पैरामीटर)> yourlogfile.txt 2> & 1

http://www.robvanderwoude.com/battech_debugging.php पर मिला

यह काम करता हैं!! 2> और 1 मत भूलना ...

जानकार


2

एकमात्र ऐसा तरीका है जिसके बारे में मैं सोच सकता हूं कि कोड echoएस और pauseएस के साथ है।


2

क्या आपने परिणाम को फ़ाइल में फिर से भरने की कोशिश की? जो भी हो .bat> log.txt

आपको यह सुनिश्चित करना होगा कि इस मामले में हर दूसरी स्क्रिप्ट को भी फाइल में लॉग किया जा रहा है जैसे >> log.txt

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


किसी फ़ाइल में परिणाम लिखने से उस सब में बहुत मदद नहीं मिलती है, कई स्क्रिप्ट होती हैं जिन्हें कॉल किया जाता है, और इसके अलावा, कई निष्पादन योग्य होते हैं जो निष्पादित होते हैं।
वरुण

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

1

या .... अपनी मुख्य .bat फ़ाइल को किसी अन्य .bat फ़ाइल से कॉल करें और परिणाम को फ़ाइल में परिणामित करें

runner.bat> mainresults.txt

जहां runner.bat मुख्य .bat फ़ाइल को कॉल करता है

आपको मुख्य .bat फ़ाइल में अब किए गए सभी कार्यों को देखना चाहिए


0

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

इस तरह के संदेशों को पढ़ने के लिए, यह बहुत महत्वपूर्ण है कि आप स्पष्ट रूप से एक कमांड प्रॉम्प्ट विंडो खोलें, जो लागू कार्यकारी निर्देशिका के लिए पैंतरेबाज़ी करता है और इसके पथ / नाम को टाइप करके बैच स्क्रिप्ट को चलाता है।


0

आप cmd \kत्रुटि देखने के लिए अपनी स्क्रिप्ट के अंत में उपयोग कर सकते हैं । यह निष्पादित होने के बाद आपके कमांड प्रॉम्प्ट को बंद नहीं करेगा


-3

या, एक cmd विंडो खोलें, फिर वहां से बैच को कॉल करें, आउटपुट स्क्रीन पर होगा।


2
यह इतनी गलत धारणाएं बनाता है कि एक उत्तर भी नहीं हो सकता। शायद सबसे बड़ी दो हैं कि ए) बैच फ़ाइल को कंसोल आउटपुट का उत्पादन करने के लिए माना जाता है। यह नहीं है, और ख) कि बैच फ़ाइल वास्तव में काम कर रही है
लीलियल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.