При выполнении определенных файлов (в основном пакетных) с использованием PsExec я получаю эти странные символы перед моей командой. Сначала я думал, что я использую неправильную кодировку, но после проверки я понял, что все мои файлы используют UTF-8.
4 ответа
Я получаю эти странные символы до моей команды […] все мои файлы использовали UTF-8.
Это имеет две причины:
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, я исправил это, выполнив следующее:
- Откройте Visual Studio.
- Нажмите Инструменты > Параметры.
- Нажмите Текстовый редактор > Расширение файла.
- В поле Extension введите bat.
- В раскрывающемся меню « Редактор» выберите « Редактор исходного кода (текста) с кодировкой» и нажмите « Добавить».
- Нажмите OK, чтобы сохранить и выйти.
Теперь, когда вы открываете файл .bat из Visual Studio, вы сначала получите запрос:
Вы захотите детально изучить опции, пока не перейдете к опции DOS на своем языке:
Нажмите OK, чтобы завершить открытие файла.
Хорошо, даже если в этот момент это должно быть достаточно очевидно, если вы видите символы ∩╗┐
в начале вашего файла, вам следует удалить их и сохранить файл, теперь с правильной кодировкой. Это то, что мешает вам снова получить запрос в следующий раз.
Имея все это на своем месте, вы будете рады узнать, что теперь вы можете просматривать, редактировать и сохранять ваши файлы .bat из Visual Studio, чтобы cmd.exe больше не давал вам вышеупомянутую ужасную ошибку:
«∩╗┐» не распознается как внутренняя или внешняя команда, работающая программа или пакетный файл.
Это 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
Как объяснялось ранее, этот символ является символом Unicode BOM (Byte Order Mark), используемым в качестве подписи, и этот cmd.exe не распознает.
Вы можете удалить его безопасно разными способами.
Я нашел очень легко сделать следующее:
- откройте файл в Notepad++
- перейти в меню кодирования
- отметьте опцию: кодировать в UTF-8 без спецификации
- Сохранить и все.