2016-10-18 16 views
6

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

CD "%userprofile%\desktop" 
MKDIR "TEST FOLDER" 
ATTRIB +s "TEST FOLDER" 
CD "TEST FOLDER" 
COPY /Y "%userprofile%\desktop\image.ico" "./image.ico" 
ECHO [.ShellClassInfo] >> desktop.txt 
ECHO ConfirmFileOp=0 >> desktop.txt 
ECHO NoSharing=1 >> desktop.txt 
ECHO IconFile=image.ico >> desktop.txt 
ECHO IconIndex=0 >> desktop.txt 
ECHO InfoTip= >> desktop.txt 
CHCP 1252 >NUL 
CMD.EXE /D /A /C (SET/P=ÿþ)<NUL > desktop.ini 2>NUL 
CMD.EXE /D /U /C TYPE desktop.txt >> desktop.ini 
DEL /F /Q desktop.txt 
ATTRIB +S +H desktop.ini image.ico 

मैं स्क्रिप्ट आसानी से पर्याप्त के बाकी मिलता है, लेकिन मैं मुसीबत को समझने इन तीन लाइनों हो रही है:

CHCP 1252 >NUL 
CMD.EXE /D /A /C (SET/P=ÿþ)<NUL > desktop.ini 2>NUL 
CMD.EXE /D /U /C TYPE desktop.txt >> desktop.ini 

SS64 मुझे chcp 1252 बताता है कुछ से संबंधित है एक "code page", 1252 के लिए इसी बुलाया "वेस्ट यूरोपीय लैटिन", तो मेरा सबसे अच्छा अनुमान यह है कि यह स्क्रिप्ट को लैटिन चरित्र सेट का उपयोग करने के लिए मजबूर करता है। सीएमडी की दूसरी दो पंक्तियां खुले उदाहरण; SS64 कहता है कि पहले/ए स्विच एक एएनएसआई में आउटपुट करता है जबकि दूसरे पर/यू इसे यूनिकोड आउटपुट बनाता है। जितना मैं अनुमान लगा सकता हूं, और मैं वास्तव में इसकी सराहना करता हूं अगर कोई इन तीन पंक्तियों के प्रत्येक प्रमुख भाग से गुजर सकता है और मुझे बताए कि वे क्या कर रहे हैं।

धन्यवाद!

+0

chcp आपके कीबोर्ड के कोडपेज को बदलता है: [और पढ़ें] (http://www.computerhope.com/chcphlp.htm) और cmd लाइनें आपके desktop.ini – mtizziani

+3

@mtizziani में हेरफेर करें: कोड पेज और कीबोर्ड पूरी तरह से असंबंधित हैं । 'सीएचसीपी 'एसटीडीआईएन से डेटा की व्याख्या और आउटपुट को कंसोल के STDOUT में बदल देता है। – IInspectable

उत्तर

6

संक्षेप में, कोड [1] :

  • एक अस्थायीdesktop.txt फ़ाइल जिसका सामग्री अंत में desktop.ini बन जाएगा बनाता है, लेकिन एक अलग एन्कोडिंग साथ।

  • प्रश्न में आदेश तो (एन अमेरिका सिस्टम पर जैसे,, CP-437) वर्तमान कंसोल-कोड पृष्ठ पर एन्कोड फ़ाइल desktop.txt परिवर्तित UTF-16 LE -encoded फ़ाइल desktop.ini है, जो (संस्कृति स्वतंत्र) फ़ाइल फ़ाइल है एक्सप्लोरर हाथ में फ़ोल्डर के प्रदर्शन को नियंत्रित करने के लिए उपयोग करता है।

  • सेट system (+S) और hidden (+H) दोनों desktop.ini फ़ाइल और संबद्ध आइकन फ़ाइल, image.ico के लिए जिम्मेदार बताते हैं, क्योंकि है कि कैसे इन फ़ाइलों को चिह्नित किया जाना चाहिए (बशर्ते उनके ही नियंत्रित कर प्रदर्शन युक्त फ़ोल्डर, और डेटा फाइल स्वयं नहीं हैं)।

विशेष रूप से, ब्याज की 3 लाइनों निम्न करें:

  • CHCP 1252 >NUL (चुपचाप) Windows-1252 कोड पृष्ठ में परिवर्तन।

  • CMD.EXE /D /A /C (SET/P=ÿþ)<NUL > desktop.ini 2>NUL प्रभावी रूप से आउटपुट फ़ाइल desktop.ini को स्ट्रिंग ÿþ भेजता है - ÿþ, जब एक Windows-1252 -encoded स्ट्रिंग के रूप में व्याख्या, बाइट्स 0xFF 0xFE, जो बीओएम (बाइट-आदेश चिह्न) UTF-16 LE -encoded फ़ाइलों की पहचान करने के लिए किया जाता है के बराबर है; दूसरे शब्दों में: desktop.ini फ़ाइल को इस स्ट्रिंग को भेजने के लिए इसे UTF-16 LE -encoded फ़ाइल के रूप में चिह्नित किया गया है।

    • /D बस किसी भी स्वत: चलाने की कार्यक्षमता है कि रजिस्ट्री
    • /A के माध्यम से परिभाषित किया जा सकता को दबा उत्पादन "एएनएसआई" -encoded तार, जहां "एएनएसआई" डिफ़ॉल्ट कोड पृष्ठ पर को संदर्भित करता है के लिए cmd.exe बताता है - जो अब सेट किया गया है Windows-1252
    • /C का अर्थ है कि निम्नलिखित तर्क कमांड के रूप में निष्पादित किए जाने चाहिए, और cmd.exe कमांड समाप्त होने के बाद बाहर निकलना चाहिए।
  • CMD.EXE /D /U /C TYPE desktop.txt >> desktop.ini तो desktop.ini को पूर्व में बने desktop.txt फ़ाइल की सामग्री को जोड़ देती है, "यूनिकोड" (UTF-16 LE) एन्कोडिंग (/U करने के लिए धन्यवाद) है, जो UTF-16 LE को अस्थायी फ़ाइल desktop.txt के रूपांतरण पूरा करता है desktop.ini -encoded का उपयोग कर (जिसके बाद desktop.txt हटा दिया गया है)।


[1]
इस उत्तर की व्याख्या कोड के आशय है, जो मतलब यह नहीं है कि यह जरूरी काम करता है, विशेष रूप से Windows 10 में; जैसे, IconResource=C:\Users\jdoe\Desktop\image.ico,0

UTF-16 LE -encoded फ़ाइलें बनाने के लिए जरूरत के लिए के रूप में: उदाहरण के लिए, सहभागी एक आइकन बताए एक अलग, एकल संपत्ति है कि छवि फ़ाइल और अपनी विशिष्ट आंतरिक संसाधन के सूचकांक को जोड़ती है स्थापित करने के लिए लगता है : यह सख्त आवश्यकता नहीं है - जाहिर है, विंडोज़, जब आप एक आइकन असाइन करने के लिए फ़ाइल एक्सप्लोरर का उपयोग करते हैं, तो मौजूदा विरासत - एकल-बाइट - एन्कोडिंग (उदाहरण के लिए, Windows-1252) में फ़ाइलें बनाता है।
उस ने कहा, संस्कृति-स्वतंत्र एन्कोडिंग जैसे UTF-16 LE कम से कम सिद्धांत में सबसे मजबूत दृष्टिकोण है।
हालांकि, यदि आप desktop.ini पर लिख रहे सभी मान ASCII- केवल वर्ण (7-बिट रेंज) हैं, तो यह केवल echo आउटपुट desktop.ini पर पाइप सुरक्षित है।

दिन के अंत में, एक बैच फ़ाइल का उपयोग कर फ़ोल्डर प्रदर्शन विशेषताओं का निर्धारण करने के लिए, एक नाजुक दृष्टिकोण है कि यह अनिवार्य रूप से रिवर्स इंजीनियरिंग सरकारी एपीआई पर आधारित है दिया - जो बदल सकते हैं।

अधिक आम तौर पर, करने के लिए बैच फ़ाइलों का उपयोग करके इन दिनों से बचा जाता है - इसके बजाय PowerShell का उपयोग करें।

+0

विस्तार के लिए धन्यवाद। क्या पहले अस्थायी पाठ फ़ाइल बनाने के साथ-साथ 'यूटीएफ -16' एन्कोडिंग में कनवर्ट करने के लिए सभी गड़बड़ करने का कोई उद्देश्य है? यह वास्तव में दृढ़ लगता है। क्या इनमें से कोई भी सरलीकृत किया जा सकता है? क्या .ini को 'यूटीएफ -16' में एन्कोड किया जाना चाहिए - क्या आप सीधे फाइल नहीं बना सकते हैं और बस 'सिस्टम' और' छुपा 'गुण जोड़ सकते हैं? – Hashim

+0

@ हाशिम: कृपया मेरा अपडेट देखें। मुझे डर है कि मैं इस खरगोश छेद को आगे जाने पर छोड़ रहा हूं ... – mklement0

+0

हाहा, यह काफी उचित है, यह एक बहुत ही सही जवाब है। मेरे पास अभी भी अधिक प्रश्न हैं, और शायद उत्तर देने के बाद और अधिक - यह उन क्षेत्रों में से एक प्रतीत होता है जहां प्रत्येक उत्तर मेरे लिए 2 और प्रश्न लाता है, शायद बड़ी तस्वीर में ग्राउंडिंग की कमी से मदद नहीं करता है, इसे दूर भी बनाता है प्रश्नों के खरगोश छेद खोने के लिए आसान है। बहुत बहुत धन्यवाद। – Hashim

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