2010-02-02 16 views
7

कहा जाता है, मैं बैच स्क्रिप्ट के साथ यूनिकोड वर्णों के साथ कुछ फ़ाइलों को हटाने की कोशिश कर रहा हूं (यह एक आवश्यकता है)। तो मैं cmd ​​चलाता हूं और निष्पादित करता हूं:बैच स्क्रिप्ट निष्पादित नहीं की जाती है अगर chcp को

> chcp 65001 

यूटीएफ -8 को प्रभावी ढंग से कोडपेज सेट करना। और यह काम करता है:

D:\temp\1>dir 
Volume in drive D has no label. 
Volume Serial Number is 8C33-61BF 

Directory of D:\temp\1 

02.02.2010 09:31 <DIR>   . 
02.02.2010 09:31 <DIR>   .. 
02.02.2010 09:32    508 1.txt 
02.02.2010 09:28    12 delete.bat 
02.02.2010 09:20    95 delete.cmd 
02.02.2010 09:13 <DIR>   Rún 
02.02.2010 09:13 <DIR>   Гуцул Каліпсо 
       3 File(s)   615 bytes 
       4 Dir(s) 11 576 438 784 bytes free 

D:\temp\1>rmdir Rún 

D:\temp\1>dir 
Volume in drive D has no label. 
Volume Serial Number is 8C33-61BF 

Directory of D:\temp\1 

02.02.2010 09:56 <DIR>   . 
02.02.2010 09:56 <DIR>   .. 
02.02.2010 09:32    508 1.txt 
02.02.2010 09:28    12 delete.bat 
02.02.2010 09:20    95 delete.cmd 
02.02.2010 09:13 <DIR>   Гуцул Каліпсо 
       3 File(s)   615 bytes 
       3 Dir(s) 11 576 438 784 bytes free 

तब मैं बैच लिपि में एक ही rmdir आदेशों रख दिया और UTF-8 एन्कोडिंग में सहेजें। लेकिन जब मैं कुछ भी नहीं करता, सचमुच कुछ नहीं: इस मामले में बैच स्क्रिप्ट से काम भी गूंज नहीं करता है। OEM एन्कोडिंग में स्क्रिप्ट को सहेजने से भी मदद नहीं मिलती है।

तो ऐसा लगता है कि जब मैं कंसोल में यूटीएफ -8 में कोडपेज बदलता हूं, तो स्क्रिप्ट बस काम करना बंद कर देती हैं। क्या कोई जानता है कि इसे कैसे ठीक किया जाए?

+0

जल्द ही एक वास्तविक उत्तर पर विचार और लिखना, लेकिन दो प्रश्न: क्या आप सुनिश्चित करते हैं कि आपकी बैच फ़ाइल में शुरुआत में यू + एफईएफएफ नहीं है? और क्या आप बैच फ़ाइल के बजाय शायद वीबीस्क्रिप्ट का उपयोग कर सकते हैं? यूनिकोड समर्थन वहां बहुत आसान है। – Joey

+0

नहीं, बैच फ़ाइल में कोई BOM नहीं है। मैं वीबीएस का उपयोग कर सकता हूं, लेकिन मैं सिर्फ यह जानना चाहता था कि मेरी समस्या को हल किया जा सकता है या नहीं। – Andy

+0

शायद यह कर सकता है; मैंने कुछ समय पहले बैच फाइलों में यूनिकोड के साथ कुछ प्रगति की है, लेकिन यह किसी भी तरह से सुंदर नहीं है और यह सबसे अच्छा था। – Joey

उत्तर

8

यदि आप बैच फ़ाइल में यूनिकोड समर्थित होना चाहते हैं, तो सीएचसीपी एक लाइन पर स्वयं बैच फ़ाइल को बंद कर देती है। क्या मेरा सुझाव है प्रत्येक बैच फ़ाइल लाइन है कि यूनिकोड की जरूरत के रूप में इस प्रकार है

chcp 65001 > nul && <real command here> 

उदाहरण पर CHCP डाल है: मेरे मामले में मैं अपने लॉग फ़ाइलों का एक अच्छा पूंछ जबकि डिबगिंग करना चाहते थे, लेकिन फिर भी लैटिन -1 के लिए सामग्री पात्रों को गड़बड़ कर दिया गया था। तो यहां मेरी बैच फ़ाइल है जो विंडोज रिसोर्स किट से वास्तविक पूंछ कार्यान्वयन को लपेटती है।

@C:\WINDOWS\system32\chcp.com 65001 >nul && tail.exe -f %1 

इसके अतिरिक्त, एक कंसोल के आउटपुट के लिए, आपको एक वास्तविक प्रकार का फ़ॉन्ट सेट करना होगा, यानी लुसीडिया कंसोल।

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

cmd /u /c <batch file command here> 

अस्वीकरण: विंडोज संसाधन किट के साथ Windows XP SP3 पर परीक्षण किया गया।

+0

तो शायद 'chcp 65001 && path \ to \ batchfile.bat' भी होगा काम? – tripleee

0

कंसोल में यूनिकोड समर्थन, और विशेष रूप से बैच फ़ाइलों में, बहुत खराब है। क्या आप पावरशेल या सक्रिय स्क्रिप्टिंग (वीबीस्क्रिप्ट या जेस्क्रिप्ट) कहने की आवश्यकता को "मोड़" सकते हैं?

यह आप लंबे समय में दु: ख का एक बहुत बचत होगी

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

+0

हाँ, मैं कर सकता हूँ। मैं बस यह जानना चाहता था, क्या यह बग हल करना संभव है (वास्तव में, यह एक बग है, है ना?) सीधे ... – Andy

0

अपने बैच फ़ाइल में पहली पंक्ति के रूप में एक रिक्त पंक्ति डालने का प्रयास करें ...

पंक्ति 1:

पंक्ति 2: CHCP 65001

पंक्ति 3: स्क्रिप्ट कमान्ड

काम करना चाहिए !

+0

क्षमा करें, मैं भूल गया: सुनिश्चित करें कि बीएटी फ़ाइल यूटीएफ -8 –

+0

के रूप में सहेजी गई है यह क्यों काम करना चाहिए? यदि संभव हो तो परीक्षण मामलों को जोड़कर विस्तार करें। – adamdunson

+0

Win7 के साथ यह काम करता है, लेकिन फिर आपको खाली लाइन के साथ या बिना chcp 65001 के साथ कोई समस्या नहीं है। एक्सपी के साथ यह अभी भी विफल रहता है। – jeb

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