╗┐╗┐ 'не распознается как внутренняя или внешняя команда

23

При выполнении определенных файлов (в основном пакетных) с использованием PsExec я получаю эти странные символы перед моей командой. Сначала я думал, что я использую неправильную кодировку, но после проверки я понял, что все мои файлы используют UTF-8.

miestasmia
источник
Почему бы не конвертировать их в UTF-16LE?
Игнасио Васкес-Абрамс
Какая разница?
Миестасмия
Разница в том, что Windows обычно не использует UTF-8.
Игнасио Васкес-Абрамс

Ответы:

30

Я получаю эти странные символы до моей команды […] все мои файлы использовали UTF-8.

Это имеет две причины:

  1. cmd.exe не поддерживает UTF-8. Он всегда использует одну из однобайтовых кодировок, часто называемых «OEM» - cp437, cp775 и т. Д., В зависимости от региональных настроек системы.

    (Я ожидал, что он также будет поддерживать UTF-16, но, очевидно, нет; даже если я добавлю спецификацию UTF-16.)

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

    Когда cmd.exe читает ваш скрипт, он не знает, что делать с меткой - он видит в спецификации три обычных символа cp437 и пытается использовать их как часть имени команды.

Сконфигурируйте ваш редактор, чтобы прекратить добавлять спецификацию в файлы в кодировке UTF-8. (Это имеет смысл только в UTF-16 и очень бесполезно в UTF-8.)

Решит ли проблема компиляция командных файлов в исполняемый файл?

эм

какие

grawity
источник
3
Я бы не сказал, что спецификации «очень бесполезны» в UTF-8; хотя они в этом конкретном случае. Многие приложения используют их для определения текста на самом деле UTF-8, а не другой кодировки.
Dour High Arch
15

Для дальнейшего ответа @ dsolimano , если вы специально используете Visual Studio , а в моем случае это 2013 , я исправил это, выполнив следующее:

  1. Откройте Visual Studio .
  2. Нажмите Инструменты > Параметры .
  3. Нажмите Текстовый редактор > Расширение файла .
  4. В поле Extension введите bat .
  5. В раскрывающемся меню « Редактор» выберите « Редактор исходного кода (текста) с кодировкой» и нажмите « Добавить» .
  6. Нажмите OK, чтобы сохранить и выйти.

Теперь, когда вы открываете файл .bat из Visual Studio , вы сначала получите запрос:

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

Вам нужно будет детализировать опции, пока вы не перейдете к опции DOS на вашем языке:

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

Нажмите OK, чтобы завершить открытие файла.


Хорошо, даже если в этот момент это должно быть достаточно очевидно, если вы видите ∩╗┐символы в начале вашего файла, вам следует удалить их и сохранить файл, теперь с правильной кодировкой. Это то, что мешает вам снова получить запрос в следующий раз.


Имея все это на своем месте, вы будете рады узнать, что теперь вы можете просматривать , редактировать и сохранять ваши файлы .bat из Visual Studio, чтобы cmd.exe больше не давал вам вышеупомянутую ужасную ошибку:

«∩╗┐» не распознается как внутренняя или внешняя команда, работающая программа или пакетный файл.

Код Маверик
источник
2
Это исправление прекрасно работает и в VS2017
Грег Тревеллик,
10

Это Unicode Byte Order Marks . 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
dsolimano
источник
4

Как объяснялось ранее, этот символ является символом Unicode BOM (Byte Order Mark), который используется в качестве подписи, и который cmd.exe не распознает.

Вы можете удалить его безопасно многими способами.

Я нашел очень легко сделать следующее:

  1. откройте файл в Notepad ++
  2. перейти в меню кодирования
  3. отметьте опцию: Кодировать в UTF-8 без спецификации
  4. Сохранить и все.
Сабри
источник