2010-11-16 17 views
7

मुझे एक ही बैच फ़ाइल में एकाधिक फ़ाइलों की प्रतिलिपि बनाने की आवश्यकता है। फ़ाइलों में यूनिकोड नाम हैं जो विभिन्न कोडपेज पर मैप करते हैं।विंडोज बैच: यूनिकोड पैरामीटर (रोबो) कॉपी कमांड

उदाहरण:

set ArabicFile=ڊڌڵڲڛشس 
set CyrillicFile=щЖЛдЉи 
set GermanFile=Bücher 

copy %ArabicFile% SomePlaceElse 
copy %CyrillicFile% SomePlaceElse 
copy %GermanFile% SomePlaceElse 

समस्या: बैच फ़ाइलें यूनिकोड नहीं हो सकता।

प्रश्न: मैं बैच फ़ाइल में यूनिकोड फ़ाइल नाम कैसे लिख सकता हूं ताकि कॉपी कमांड उन्हें पहचान सके?

नोट्स:

मुझे परवाह नहीं है कैसे फ़ाइल नाम प्रदर्शित होते हैं।
असल में बैच फ़ाइल इन फ़ाइलों की प्रतिलिपि बनाने से कहीं अधिक है, मैंने समस्या को स्पष्ट करने के लिए विवरण को सरल बना दिया है।

सही बैच फ़ाइल:

Arnout के जवाब के साथ इस प्रकार मैं अपने बैच फ़ाइल संशोधित। यह फ़ॉन्ट परिवर्तन की आवश्यकता के बिना सही ढंग से काम करता है (जो गन्दा होगा, जैसा कि अर्नाउट ने टिप्पणी की थी)।

@echo off 

chcp 65001 

set ArabicFolder=ڊڌڵڲڛشس 
set CyrillicFolder=щЖЛдЉи 
set GermanFolder=Bücher 

robocopy /e d:\temp\test\%ArabicFolder% d:\temp\test2\%ArabicFolder% /log:copy.log 
robocopy /e d:\temp\test\%CyrillicFolder% d:\temp\test2\%CyrillicFolder% /log+:copy.log 
robocopy /e d:\temp\test\%GermanFolder% d:\temp\test2\%GermanFolder% /log+:copy.log 

उत्तर

12

तो

  • मैं CHCP 65001 अपने बैच फ़ाइल की पहली पंक्ति के रूप में,
  • UTF-8 बीओएम के बिना के रूप में फ़ाइल सहेजें, और जोड़ने
  • "रेखापुंज से कुछ और करने के लिए मेरे कंसोल फ़ॉन्ट सेट फ़ॉन्ट्स "(मेरे विन 7 बॉक्स पर मैं कंसोलस या लुसीडा कंसोल चुन सकता हूं),

यह काम करता है। सरल, नहीं? :-)

(फ़ॉन्ट परिवर्तन वास्तव में आवश्यक नहीं है, बशर्ते आप कंसोल के लिए गैर- ASCII उत्पादन नहीं लिख रहे हैं।)

+0

फ़ॉन्ट परिवर्तन * आवश्यक हो सकता है यदि आप कमांड आउटपुट का उपयोग करना चाहते हैं जिसमें यूनिकोड हो सकता है;) – Joey

+0

उम्म, हाँ, यही मेरा मतलब है "बशर्ते आप कंसोल में गैर-ASCII आउटपुट नहीं लिख रहे हैं" ... – Arnout

+0

कूल, यह काम करता है ;-) केवल गॉचा: मैं बैच फ़ाइल के भीतर से फ़ॉन्ट कैसे सेट करूं? बैच फ़ाइल एकाधिक कंप्यूटरों पर चलाना है और मैं अपनी स्क्रिप्ट चलाने से पहले उन्हें पुन: कॉन्फ़िगर नहीं कर सकता। और फ़ॉन्ट परिवर्तन आवश्यक है - अगर मैं फ़ॉन्ट नहीं बदलता, तो सेट कमांड विफल हो जाते हैं। –

1

मुझे यकीन नहीं है, लेकिन मुझे लगता है कि छोटा (8.3) फ़ाइल नाम ASCII होगा, तो आप इसे इस तरह से देख सकते हैं? आप dir /X के साथ संक्षिप्त फ़ाइल नाम ढूंढ सकते हैं।

+0

अच्छा सोच से चलाने के सीधे -

RunThis.bat (कोई बीओएम Notepad ++ UTF-8 बचाने के लिए)! यह मेरे मामले में आपके समाधान का उपयोग नहीं कर सकता है, हालांकि, बैच फ़ाइल को एकाधिक सिस्टम पर चलाने की आवश्यकता है और कंप्यूटर के बीच छोटे नाम भिन्न हो सकते हैं (उदाहरण के लिए जब ऑर्डर जिसमें फाइलें बनाई गई थीं समान नहीं थीं)। –

+0

लघु फ़ाइल नाम जनरेशन अक्षम किया जा सकता है, इसलिए आपको किसी भी मामले पर भरोसा नहीं करना चाहिए। – Philipp

0

मैं एक बैच फ़ाइल (जैसे RunThis.bat) जिनमें से निर्देशिका बनाता है बनाना चाहते हैं, नाम जो रूसी या अन्य हो सकते हैं।

उदाहरण:
जब डॉस विंडोज शीघ्र के साथ खुला है:

D:\>md "Russia - Шпионка" 

की तरह और आदेश में इस काम के नाम सही ढंग से दिखाई देते हैं।

लेकिन अगर मैं नोटपैड का उपयोग करके कोशिश करता हूं और ANSII में सहेजता हूं, तो मैं नहीं कर सकता।
तो यदि मैं फिर से नोटपैड का उपयोग करता हूं और यूटीएफ -8 में सहेजता हूं, तो यह कचरा पात्रों के साथ काम करेगा।

RunThis.bat (नोटपैड यूटीएफ -8 को बचाएं), कचरे के पात्र दें।

chcp 65001 
set fn14="Russia - Шпионка" 
md %fn14% 

समस्या नोटपैड के साथ यह UTF-8 साथ बीओएम उपयोग करता है।

बीओएम के बिना यूटीएफ -8 का उपयोग करके .bat को सहेजने के लिए हमें नोटपैड ++ जैसे संपादक का उपयोग करना होगा।

chcp 65001 
set fn14="Russia - Шпионка" 
md %fn14% 

इस बार अपना काम पूरी तरह से जब हम "RunThis.bat" explorer.exe

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