́╗┐ 'को आंतरिक या बाह्य कमांड के रूप में मान्यता नहीं दी जाती है


25

जब PsExec का उपयोग करके कुछ फ़ाइलों (मुख्य रूप से बैच) को निष्पादित किया जाता है, तो मुझे मेरी कमांड से पहले ये अजीब before ’चिन्ह मिलते हैं। मेरा प्रारंभिक विचार था, कि मैं गलत एन्कोडिंग का उपयोग कर रहा था, लेकिन जाँच के बाद, मुझे महसूस हुआ कि मेरी सभी फाइलें UTF-8 का उपयोग कर रही हैं।


इसके बजाय उन्हें यूटीएफ -16 ईएल में क्यों नहीं बदला जाए?
इग्नासियो वाज़केज़-अब्राम्स

क्या फर्क पड़ता है?
मेस्टैस्मिया

अंतर यह है कि Windows आमतौर पर UTF-8 का उपयोग नहीं करता है।
इग्नासियो वाज़केज़-अब्राम्स

जवाबों:


32

मेरे आदेश से पहले मुझे ये अजीब get प्रतीक मिलते हैं […] मेरी सभी फाइलें UTF-8 का उपयोग कर रही थीं।

इसके दो कारण हैं:

  1. cmd.exe UTF-8 का समर्थन नहीं करता है। यह हमेशा एकल-बाइट एन्कोडिंग में से एक का उपयोग करता है जिसे अक्सर "ओईएम" कहा जाता है - सिस्टम की क्षेत्रीय सेटिंग्स के आधार पर cp437, cp775, और इसी तरह।

    (मुझे उम्मीद है कि यह UTF-16 को भी सपोर्ट करेगा, लेकिन जाहिरा तौर पर नहीं, भले ही मैंने UTF-16 BOM को जोड़ा हो।)

  2. आपका टेक्स्ट एडिटर EF BB BFसभी UTF-8 फ़ाइलों की शुरुआत में UTF-8 "बाइट ऑर्डर मार्क" (बाइट्स ) जोड़ रहा है ।

    जब cmd.exe आपकी स्क्रिप्ट को पढ़ता है, तो यह नहीं जानता कि चिह्न के साथ क्या करना है - यह BOM को तीन साधारण cp437 वर्णों के रूप में देखता है , और कमांड नाम के भाग के रूप में उनका उपयोग करने का प्रयास करता है।

UTF-8-एन्कोडेड फ़ाइलों में BOM जोड़ने से रोकने के लिए अपने संपादक को कॉन्फ़िगर करें। (यह केवल UTF-16 में समझ में आता है, और UTF-8 में बहुत बेकार है।)

एक exe में बैच फ़ाइलों को संकलित करने से समस्या हल हो जाएगी?

उह

क्या


3
मैं यह नहीं कहूंगा कि UTF-8 में BOMs "बहुत बेकार" हैं; हालांकि वे इस विशेष मामले में हैं। कई अनुप्रयोग उन्हें वास्तव में UTF-8 का पाठ निर्धारित करने के लिए उपयोग करते हैं और अन्य एन्कोडिंग नहीं।
डोर हाई आर्क

19

आगे @ dsolimano के उत्तर के लिए , यदि आप विशेष रूप से विज़ुअल स्टूडियो का उपयोग कर रहे हैं , और मेरे मामले में यह 2013 है , तो मैंने इसे निम्न करके निर्धारित किया:

  1. विजुअल स्टूडियो खोलें ।
  2. उपकरण > विकल्प पर क्लिक करें ।
  3. पाठ संपादक > फ़ाइल एक्सटेंशन पर क्लिक करें ।
  4. में एक्सटेंशन बॉक्स, प्रवेश बल्ला
  5. में संपादक ड्रॉप डाउन, चयन स्रोत कोड (पाठ) एन्कोडिंग के साथ संपादक और क्लिक करें
  6. सहेजने और बाहर निकलने के लिए ओके पर क्लिक करें ।

अब, जब आप Visual Studio के भीतर .bat फ़ाइल खोलते हैं , तो आपको शुरू में इसके साथ संकेत मिलेगा:

यहाँ छवि विवरण दर्ज करें

आप अपनी भाषा के डॉस विकल्प में आने तक विकल्पों के माध्यम से ड्रिल करना चाहेंगे :

यहाँ छवि विवरण दर्ज करें

फ़ाइल खोलने के लिए ठीक पर क्लिक करें ।


ठीक है, भले ही यह इस बिंदु पर काफी स्पष्ट होना चाहिए, अगर आप ∩╗┐अपनी फ़ाइल की शुरुआत में पात्रों को देख सकते हैं, तो आपको उन्हें हटाने और फ़ाइल को सहेजने के लिए कहा जाएगा, अब सही एन्कोडिंग के साथ। यह वही है जो आपको अगली बार फिर से संकेत करने से रोकता है।


उस स्थान के सभी के साथ, आपको यह जानकर खुशी होगी कि अब आप Visual Studio के भीतर से अपनी .bat फ़ाइल को देख सकते हैं , संपादित कर सकते हैं और सहेज सकते हैं ताकि cmd.exe अब आपको पूर्वोक्त जघन्य त्रुटि न दे:

'' ' को आंतरिक या बाहरी कमांड, ऑपरेशनल प्रोग्राम या बैच फ़ाइल के रूप में मान्यता नहीं दी जाती है।


2
यह फिक्स VS2017 में भी पूरी तरह से काम करता है
ग्रेग

1
मैंने कभी यह अनुमान नहीं लगाया होगा। अभी भी VS2019 के लिए एक वैध समाधान।
hulens

10

वो हैं यूनिकोड बाइट ऑर्डर मार्क्स । Cmd.exe उन्हें नहीं समझता है। यदि आप ANSI एन्कोडिंग के साथ नोटपैड में अपनी फ़ाइलों को फिर से सेव करते हैं, तो समस्या को ठीक करना चाहिए।

उदाहरण के लिए, मैंने यह बैच फ़ाइल बनाई:

echo Hello World

पहले मैं इसे UTF-8 एन्कोडिंग के साथ सहेजता हूं

C:\Users\DSolimano\Desktop\junk>test.bat

C:\Users\DSolimano\Desktop\junk>echo Hello World
'echo' is not recognized as an internal or external command,
operable program or batch file.

फिर यूनिकोड के साथ

C:\Users\DSolimano\Desktop\junk>test.bat

C:\Users\DSolimano\Desktop\junk>■e
'■e' is not recognized as an internal or external command,
operable program or batch file.

और अंत में ANSI के साथ

C:\Users\DSolimano\Desktop\junk>test.bat

C:\Users\DSolimano\Desktop\junk>echo Hello World
Hello World

4

जैसा कि पहले बताया गया है, यह चरित्र यूनिकोड वर्ण BOM (बाइट ऑर्डर मार्क) है जिसे हस्ताक्षर के रूप में उपयोग किया जाता है और जो cmd.exe नहीं पहचानता है।

आप इसे कई तरीकों से सुरक्षित रूप से हटा सकते हैं।

मैंने इस प्रकार करना बहुत आसान पाया है:

  1. नोटपैड ++ में फ़ाइल खोलें
  2. करने के लिए जाना एन्कोडिंग मेनू
  3. विकल्प पर टिक करें: बिना BOM के UTF-8 में एनकोड करें
  4. बचाओ, और वही है।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.