При выполнении определенных файлов (в основном пакетных) с использованием PsExec я получаю эти странные символы перед моей командой. Сначала я думал, что я использую неправильную кодировку, но после проверки я понял, что все мои файлы используют UTF-8.
23
Ответы:
Это имеет две причины:
cmd.exe не поддерживает UTF-8. Он всегда использует одну из однобайтовых кодировок, часто называемых «OEM» - cp437, cp775 и т. Д., В зависимости от региональных настроек системы.
(Я ожидал, что он также будет поддерживать UTF-16, но, очевидно, нет; даже если я добавлю спецификацию UTF-16.)
Ваш текстовый редактор добавляет UTF-8 "метку порядка байтов" (байты
EF
BB
BF
) в начало всех файлов UTF-8.Когда cmd.exe читает ваш скрипт, он не знает, что делать с меткой - он видит в спецификации три обычных символа cp437
’
╗
┐
и пытается использовать их как часть имени команды.Сконфигурируйте ваш редактор, чтобы прекратить добавлять спецификацию в файлы в кодировке UTF-8. (Это имеет смысл только в UTF-16 и очень бесполезно в UTF-8.)
эм
какие
источник
Для дальнейшего ответа @ dsolimano , если вы специально используете Visual Studio , а в моем случае это 2013 , я исправил это, выполнив следующее:
Теперь, когда вы открываете файл .bat из Visual Studio , вы сначала получите запрос:
Вам нужно будет детализировать опции, пока вы не перейдете к опции DOS на вашем языке:
Нажмите OK, чтобы завершить открытие файла.
Хорошо, даже если в этот момент это должно быть достаточно очевидно, если вы видите

символы в начале вашего файла, вам следует удалить их и сохранить файл, теперь с правильной кодировкой. Это то, что мешает вам снова получить запрос в следующий раз.Имея все это на своем месте, вы будете рады узнать, что теперь вы можете просматривать , редактировать и сохранять ваши файлы .bat из Visual Studio, чтобы cmd.exe больше не давал вам вышеупомянутую ужасную ошибку:
источник
Это Unicode Byte Order Marks . Cmd.exe не понимает их. Если вы повторно сохраните свои файлы в Блокноте с кодировкой ANSI, это должно решить проблему.
Например, я создал этот командный файл:
Сначала я сохраняю его с кодировкой UTF-8
Потом с юникодом
И, наконец, с ANSI
источник
Как объяснялось ранее, этот символ является символом Unicode BOM (Byte Order Mark), который используется в качестве подписи, и который cmd.exe не распознает.
Вы можете удалить его безопасно многими способами.
Я нашел очень легко сделать следующее:
источник