2008-10-31 11 views
9

उदाहरण के लिए, मैं एक बैच 'test.cmd' बुलाया फ़ाइल है और यह बस होता है लगता है:विंडोज कमांड प्रॉम्प्ट बनाम बैच फ़ाइल के एन्कोडिंग के बीच कोई अंतर क्यों है?

echo %1 

मैं 'test.cmd some¬arg' साथ कमांड प्रॉम्प्ट से सीधे इस कॉल कर सकते हैं और नतीजा यह है कि स्ट्रिंग 'some¬arg' मुद्रित किया जाता है।

हालांकि अगर मैं दूसरी बैच फ़ाइल में उसी कॉल को रखता हूं, जिसे तर्क के लिए 'tester.cmd' कहा जाता है, और मैं इसे कमांड प्रॉम्प्ट से कॉल करता हूं तो परिणाम यह है कि स्ट्रिंग 'some%arg' मुद्रित है।

यह क्या है जो एन्कोडिंग को गड़बड़ कर देता है और मैं इसके आसपास कैसे हो सकता हूं? मुझे यकीन है कि मैंने इसे पहले तय कर लिया है, लेकिन मुझे याद नहीं है कि कैसे ...

धन्यवाद!

+1

क्या आप वाकई एक प्रतिशत संकेत हैं? मेरी मशीन पर यह एक "¼" है। – Tomalak

उत्तर

9

इसका कारण यह है अपने बैच फ़ाइल एक अलग कोड पेज में एन्कोड किया गया है की तुलना में cmd.exe में है है।

पश्चिमी डिफ़ॉल्ट विन्यास में, cmd.exe CP850 में शुरू होता है, लेकिन आम तौर पर पाठ संपादक CP1252 में काम करते हैं (क्या अक्सर गलत तरीके से लैटिन -1 या आईएसओ -885 9 -1 के रूप में जाना जाता है)।

वर्ण "¬" और "¼" इन दो कोड पृष्ठों, "बीसी" में एक ही वर्ण कोड साझा करते हैं।

समाधान सरल है। या तो कोड पेज 850 में अपनी बैच फ़ाइल को एन्कोड करें, या chcp 1252 जारी करके cmd.exe को कोड पृष्ठ 1252 पर स्विच करें।

+0

तो, आपका सुझाव है कि मैं बैच फ़ाइल के शीर्ष पर chcp 1252 का उपयोग कर सकता हूं और फिर लूप के लिए मुझे डबल% प्रतीक का उपयोग करने की आवश्यकता नहीं होगी? – djangofan

+0

@djangofan नहीं, बिलकुल नहीं। डबल '%%' कमांड प्रोसेसर की आवश्यकता है और चरित्र एन्कोडिंग के साथ कुछ लेना देना नहीं है। – Tomalak

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