batch-file
Cmd.exe प्रोसेसर में कीड़े
खोज…
परिचय
यह विषय प्रोसेसर बग के कारण होने वाली त्रुटियों पर केंद्रित होगा। यहां वे चीजें हैं जो हम मुद्दे के कारण और समाधान पर ध्यान केंद्रित करेंगे।
टिप्पणियों
उदाहरण में DEL फ़ाइल एक्सटेंशन , उपयोगकर्ता X. लियू ने नोटिस किया कि यह बग तब नहीं होगा जब DEL कमांड में फ़ाइल एक्सटेंशन 3 वर्णों से कम है।
कोष्ठक भ्रम
इस वेबसाइट से, ओपी ने एक समस्या पर ध्यान दिया है।
कारण
निम्नलिखित कोड स्निपेट पर विचार करें।
if 1==1 (
set /a result = 2*(3+4)
)
आपकी पहली नज़र में, आप सोच सकते हैं कि CMD.exe इसे इस तरह संसाधित करेगा:
- शर्त सही है, कोड ब्लॉक निष्पादित करें
- परिवर्तनशील परिणाम का मान
14सेट करें - जारी रखें
हालाँकि, CMD.exe प्रक्रिया ऐसी है:
- शर्त सही है, कोड ब्लॉक निष्पादित करें
-
2*(3+4बाद2*(3+4)गणना करें,ifकोड ब्लॉक किया गया है - एक यादृच्छिक
)दिखाई दिया है!
दूसरा चरण Unbalanced parentheses त्रुटि लौटाएगा।
समाधान
एक जर्मन CMD.exe के set /? अनुसार set /? , हमें अंकगणित संचालन को उद्धृत करने की आवश्यकता होगी। यहाँ एक उदाहरण है।
| पिछला | परिणाम |
|---|---|
set /a result=2+5*4 | set /a result="2+5*4" |
वैसे, एक अंग्रेजी CMD.exe set /? अनुसार set /? , यदि तार्किक या मापांक संचालक अभिव्यक्ति में मौजूद हैं (हालांकि यह एक जरूरी कदम नहीं है), उद्धरण आवश्यक हैं।
अनुचित पलायन चरित्र
इस स्टैक ओवरफ्लो प्रश्न में , उपयोगकर्ता txtechhelp को ^ चरित्र के साथ एक समस्या मिली, जो सुरक्षा समस्या का कारण बन सकती है।
कारण
anyInvaildCommand ^
नोट: सुनिश्चित करें कि कैरेट ( ^ ) अंतिम वर्ण है! कोई भी अतिरिक्त CR\LF बिल्कुल काम नहीं करेगा!
अगले चरित्र से बचने के लिए कैरट दिखता है। हालाँकि, बचने के लिए कोई और पात्र उपलब्ध नहीं हैं, इसलिए cmd अनन्तता से बच जाते हैं, बचने के लिए पात्र की तलाश में। इस "लूप" प्रक्रिया में, cmd.exe आपकी कंप्यूटर मेमोरी का उपभोग करेगा। और धीरे-धीरे सभी मेमोरी खा रहे हैं, कंप्यूटर को घुटनों पर ला रहे हैं।
यह समस्या अधिक गंभीर सुरक्षा चिंताओं को जन्म दे सकती है क्योंकि कोई व्यक्ति किसी के अनलॉक किए गए कंप्यूटर में कोड दर्ज कर सकता है।
समाधान
यूटीएफ -16 कोड कोड का उपयोग करें इस समस्या को हल कर सकते हैं। केवल UTF-8 या ASCII बग का कारण होगा।
सुनिश्चित करें कि फ़ाइल में एक अतिरिक्त
CR\LFहै, या बस फ़ाइल के अंत में कैरेट का उपयोग न करें।
अतिरिक्त
यह बग विंडोज 10 में हल किया गया लगता है।
DEL फ़ाइल एक्सटेंशन
इस बग को Microsoft Windows फोरम थ्रेड से steve2916 द्वारा रिपोर्ट किया गया था ।
कारण
ऐसी फ़ाइलों के साथ एक फ़ोल्डर पर विचार करें।
TestA.doc
TestB.doc
TestC.docx
TestD.docx
यदि हम इस निर्देशिका में सभी .doc फ़ाइल को निकालना चाहते हैं, तो हम आमतौर पर ऐसा करेंगे:
del *.doc
हालाँकि, यह आदेश भी .docx फ़ाइलों को निकालता है। इस पैटर्न के साथ फ़ाइल एक्सटेंशन पर भी ऐसा ही होता है।
| फ़ाइल ए | फ़ाइल बी |
|---|---|
| कोई नाम। एबीसी | दूसरा नाम। abc d |
जैसा कि हम देख सकते हैं, जब तक कि फाइल एक्सटेंशन स्ट्रिंग में del कमांड में प्रयुक्त स्ट्रिंग होती है, फाइल डिलीट हो जाएगी। ध्यान दें कि यह बग केवल तब होता है जब del कमांड में प्रयुक्त एक्सटेंशन स्ट्रिंग में कम से कम तीन अक्षर होते हैं। उदाहरण के लिए, del *.do A.doc या A.docx ।
समाधान
थ्रेड में, उपयोगकर्ता MicroCompsUnltd ने देखा कि Powershell का उपयोग करने से समस्या हल हो जाएगी।