́╗┐ 'не розпізнається як внутрішня чи зовнішня команда


25

Під час виконання певних файлів (переважно пакетних) за допомогою PsExec я отримую ці дивні символи перед моєю командою. Моя початкова думка полягала в тому, що я використовую неправильне кодування, але перевіривши, я зрозумів, що для всіх моїх файлів використовується UTF-8.


Чому б не перетворити їх на UTF-16LE замість цього?
Ігнасіо Васкес-Абрамс

Яка різниця?
miestasmia

Різниця полягає в тому, що Windows зазвичай не використовує UTF-8.
Ігнасіо Васкес-Абрамс

Відповіді:


32

Я отримую ці дивні символи «до» перед моєю командою […], щоб усі мої файли використовували UTF-8.

Це має дві причини:

  1. cmd.exe не підтримує UTF-8. Він завжди використовує одне однобайтове кодування, яке часто називають "OEM" - cp437, cp775 тощо, залежно від регіональних налаштувань системи.

    (Я очікував, що він також підтримує UTF-16, але, мабуть, ні; навіть якщо я додав BT UTF-16.)

  2. Ваш текстовий редактор додає UTF-8 "байт порядку" (байтів EF BB BF) до початку всіх файлів UTF-8.

    Коли cmd.exe читає ваш сценарій, він не знає, що робити з позначкою - він бачить BOM як три звичайних cp437 символів , і намагається використовувати їх як частину назви команди.

Налаштуйте свій редактор, щоб припинити додавати BOM до файлів, кодованих UTF-8. (Це має сенс лише в UTF-16 і дуже марно в UTF-8.)

Чи може компіляція пакетних файлів в exe вирішити проблему?

е

що


3
Я б не сказав, що BOM є "дуже марними" в UTF-8; хоча вони є в цьому конкретному випадку. Багато додатків використовують їх для визначення тексту, що насправді є UTF-8, а не іншим кодуванням.
Висока арка Dour

19

Для подальшої відповіді @ dsolimano , якщо ви спеціально використовуєте Visual Studio , а в моєму випадку це 2013 рік , я виправив це, зробивши наступне:

  1. Відкрити візуальну студію .
  2. Клацніть Інструменти > Параметри .
  3. Клацніть Редактор тексту > Розширення файлу .
  4. У полі Extension введіть bat .
  5. У спадному меню " Редактор" виберіть " Редактор вихідного коду (Текст) з кодуванням" та натисніть " Додати" .
  6. Клацніть OK, щоб зберегти та вийти.

Тепер, коли ви відкриєте .bat файл із Visual Studio , спочатку вам буде запропоновано:

введіть тут опис зображення

Ви хочете детально ознайомитись з параметрами, поки ви не перейдете до DOS- опції своєї мови:

введіть тут опис зображення

Клацніть OK, щоб закінчити відкриття файлу.


Добре, хоча це має бути досить очевидним, якщо ви бачите ∩╗┐символи на початку вашого файлу, вам слід видалити їх і зберегти файл, тепер із правильним кодуванням. Це те, що перешкоджає повторному запрошенню наступного разу.


Маючи все це на своєму місці, ви будете раді дізнатись, що тепер ви можете переглядати , редагувати та зберігати свої .bat- файли з Visual Studio, щоб cmd.exe більше не давав вам згаданої грізної помилки:

'∩╗┐' не розпізнається як внутрішня чи зовнішня команда, функціонуюча програма чи пакетний файл.


2
Цей виправлення також ідеально працює у VS2017
Грег Тревеллік,

1
Я ніколи б про це не здогадувався. Досі дієве рішення для VS2019.
hbulens

10

Це позначки порядку байтів Unicode . 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.

Потім з Unicode

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. позначте опцію: Кодувати в UTF-8 без BOM
  4. Збережіть, і все.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.