2008-10-24 12 views
40

Windows XP में एक बैच फ़ाइल मैं बेतरतीब ढंग से त्रुटि संदेश उत्पन्न पाया है चल रहा है जबकि:"सिस्टम निर्दिष्ट बैच लेबल क्यों नहीं ढूंढ सकता" लेबल मौजूद होने पर भी फेंक दिया जाता है?

प्रणाली बैच लेबल निर्दिष्ट name_of_label

पाठ्यक्रम लेबल के

अस्तित्व में नहीं मिल सकता है। इस त्रुटि का कारण क्या है?

उत्तर

42

वास्तव में, यदि आप ऐसा करने के लिए 2 की स्थिति की जरूरत है:

  • बैच फ़ाइल CRLF लाइन अंत
  • लेबल आप कूद एक ब्लॉक सीमा अवधि चाहिए करने के लिए (के रूप में करने के लिए और विरोध किया उपयोग नहीं करना चाहिए: अंत लेबल wich सिर्फ आपकी स्क्रिप्ट के अंत में एक शॉर्टकट है)

देखें। The system cannot find the batch label specified और Batch-as-batch-can!

+2

इस मुद्दे को ग्रहण के साथ भेजे गए चींटी बैच फ़ाइल के साथ और एमएसवीसी से बुलाया जा रहा था - सभी निश्चित तय, धन्यवाद। –

+0

यहां एक अन्य कारण बता रहा है: http://stackoverflow.com/q/1522129/471214 – mmdemirbas

+0

ग्रोवी के साथ भेजे गए बैच स्क्रिप्ट के साथ इस समस्या को मिला - सभी स्क्रिप्ट में केवल एलएफ शामिल है, मुझे इसे मैन्युअल रूप से CRLF से प्रतिस्थापित करना पड़ा। – Neel

9

यदि बैच फ़ाइल में यूनिक्स लाइन समाप्त होती है तो यह कभी-कभी हो सकती है।

बस unix2dos और समस्या हल होनी चाहिए।

5

आपको यह भी सुनिश्चित करना चाहिए कि जब आप अन्य स्क्रिप्ट को कॉल करते हैं तो कॉलर के पर्यावरण में उन्हें कॉल करने के बजाय आप कॉल का उपयोग करते हैं।

11

यहां समस्या है और इसे कैसे ठीक करें। मुद्दा डॉस बैच cmd प्रोग्राम में एक बग या सुविधा है। सबसे पहले स्पष्ट समस्या कथन। यदि आपके पास लक्ष्य लेबल जैसे ": doesis" के साथ एक डॉस बैच फ़ाइल है, और लेबल के अंत में आपके पास स्पेस नहीं है तो बैच फ़ाइल काम नहीं करेगी यदि लाइन समाप्त होने वाली यूनिक्स लाइन एंडिंग है। इसका अर्थ यह है कि आप इसे इस्तेमाल करने से पहले फ़ाइल पर unix2dos चला सकते हैं।

मूल कारण डॉस कमांड लाइन प्रोसेसर है, (शैल प्रोग्राम), लेबल के हिस्से के रूप में यूनिक्स एंड-ऑफ़-लाइन वर्ण लेता है। चूंकि भाग में जाने के लिए कभी भी लेबल के रूप में इसका उपयोग नहीं किया जाता है, इसलिए ऐसा कभी नहीं पाया जाता है क्योंकि इस तरह के लेबल वास्तव में मौजूद नहीं हैं। समाधान प्रत्येक लक्ष्य लेबल के अंत में एक अतिरिक्त स्थान डालना है, या हर पंक्ति को भी बेहतर बनाना है। अब यूनिक्स लाइनों के अंत में खेलने के लिए नहीं आते हैं क्योंकि अंतरिक्ष विभाजक के रूप में कार्य करता है और यह सब काम करता है।

24

मुझे पहले एक ही समस्या मिली है। हालांकि, मूल कारण सीआरएलएफ बिल्कुल नहीं था। ऐसा इसलिए था क्योंकि लिपि में मैंने एंट जैसे बाहरी कार्यक्रम को निष्पादित किया था, लेकिन एंटी से पहले CALL नहीं लगाया था। तो, सुनिश्चित करें कि आप CALL अपनी बैच स्क्रिप्ट में उपयोग किए जाने वाले प्रत्येक बाहरी प्रोग्राम को सुनिश्चित करें।

+0

मैं यह इंगित करना चाहता हूं कि यह एक अतिरिक्त कारण है। कॉलिंग और बाहरी कार्यक्रम के दौरान मुझे यह समस्या थी और इस सुझाव ने समस्या हल की। –

+0

ग्रोवी के साथ भेजे गए बैच स्क्रिप्ट के साथ इस समस्या को मिला - यह सुनिश्चित नहीं है कि उनके पास विंडोज़ के बजाय एक्सई क्यों नहीं है! – Neel

+2

विंडोज़ में, आप एक '.bat' चला रहे हैं और इसे महसूस नहीं कर सकते! मैंने अभी सीखा है कि 'mvn' चल रहा है वास्तव में बैच फ़ाइल' mvn.cmd' निष्पादित करता है, और यह समझने की कोशिश कर रहा एक घंटे गुम हो गया कि जब भी मैं 'mvn' चलाता हूं तो मेरी स्क्रिप्ट इस त्रुटि के साथ क्यों विफल रही थीं। – jordanpg

2

मुझे शब्द से प्रारंभ कमांड कॉपी करने और इसे कमांड विंडो में पेस्ट करने के बाद यह समस्या थी। सामने "-" के साथ एक विकल्प था, और सोचा कि यह डीओएस जैसा दिखता है "-" यह नहीं था :) "-" टाइप करने के बाद समस्या हल हो गई थी और बैच ने काम किया ... एक कठिन समस्या खोजने के लिए ....

1

मुझे अभी एक .cmd फ़ाइल और विंडोज 8 के साथ एक समान समस्या का सामना करना पड़ा। समाधान सीआर + एलएफ डॉस शैली में सभी लाइन समाप्ति को बदलना था। मुद्दा भ्रमित था क्योंकि बैच फ़ाइल ज्यादातर काम करती है और लाइनों को पुनर्व्यवस्थित करने से प्रभाव बदल जाता है।

.cmd फ़ाइल देखा की तरह:

call:function_A "..\..\folderA\" 
call:function_B "..\..\folderB\" 
call:function_C "..\..\folderC\" 
call:function_D "..\..\folderD\" 
goto:eof 

:function_A 
rem do stuff 
goto:eof 

...etc... 

समारोह सी त्रुटि "प्रणाली बैच लेबल निर्दिष्ट नहीं मिल सकता है" का कारण होगा। आश्चर्यजनक रूप से यह कॉल को पुन: व्यवस्थित करके दूर जा सकता है। 0x0A से 0x0D0A तक लाइन अंतराल बदलने से यह तय हो गया है।

शायद वॉनसी का मतलब था "बैच फ़ाइल को सीआरएलएफ लाइन एंडिंग का उपयोग करना चाहिए"।

+0

वॉनसी की टिप्पणी के संबंध में, यह तर्कसंगत रूप से सही है, हालांकि भ्रमित तरीके से कहा जाता है। वह कहता है (पैराफ्रेशिंग), त्रुटि होने के लिए, इन दो स्थितियों को सच होना चाहिए। ERROR == (ए और बी), इसलिए, यदि अधिकांश लोगों की तरह आप एक त्रुटि नहीं चाहते हैं, तो आप जो कहते हैं उसे उलटा करते हैं,! ERROR == (! ए ||! बी), इसलिए त्रुटि से बचने के लिए, एक शर्त, दूसरे, या दोनों का उलटा होना चाहिए। इसलिए त्रुटि से बचने के लिए, सीआरएलएफ का उपयोग करें या ब्लॉक सीमा को फैलाने से बचें। सरल बैच फ़ाइलों के लिए, सीआर एलएफ शायद काम करेगा। – user314159

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