Окна командной строки (и, соответственно, файлы BAT) по умолчанию работают в кодовой странице OEM
.Какая именно кодовая страница определяется настройками вашей ОС (Language for non-Unicode programs
или аналогичной).Поэтому вы обычно не можете использовать что-либо вне ASCII или любой другой кодовой страницы, которая у вас есть.
Сохранить скрипт как UTF-8
Чтобы использовать эти символы, вам нужно будет работать с кодовой страницей, которая на самом деле имеет их.UTF-8
- лучший вариант для этих задач (и, вероятно, единственный, который будет работать в вашем случае).
Сначала сохраните ваш скрипт как UTF-8.В notepad
вы можете выбрать кодовую страницу из меню save as
.
Если ваш редактор не позволяет вам выбрать UTF-8 (no BOM)
, оставьте первую строку вашего BAT-файла пустой, поскольку некоторые редакторы могут предварять ваш файл специальным заголовком BOM
, который помогает обнаруживать кодовую страницу.Если это произойдет, и вы оставите первую строку пустой, вы получите ошибку Bad command or file name
, как только ваш скрипт запустится, но это не помешает его правильной работе.
Выберите кодовую страницу UTF-8
Теперь ваш сценарий находится в UTF-8
, но процессор команд Windows по-прежнему будет выполнять его, как если бы он был в ASCII
, что повредит все специальные символы.Чтобы указать нашу кодировку, нам нужно добавить следующую команду, предпочтительно в качестве первой непустой строки вашего скрипта, включая комментарии (в них могут быть символы не ASCII - с непредсказуемыми результатами)
CHCP 65001
CHCP
изменяет текущую кодовую страницу на 65001
, которая является внутренним номером кодовой страницы для UTF-8
.
Это работает, потому что латинские буквы и цифры в UTF-8
имеют ту же кодировку, что и в кодовых страницах ASCII
и OEM
,Таким образом, ваши сценарии начинают выполняться в кодовой странице OEM
, но, поскольку сама команда CHCP 65001
не имеет символов, отличных от ASCII, она правильно поняла.Все последующие команды будут выполняться в UTF-8 и могут содержать символы не-ASCII.
Теперь вы можете вставить em-dash
в имя файла, и оно не будет заменено на ?
при сохранении.
Установить шрифт UTF-8
К сожалению, стандартный шрифт окна консоли не отображает UTF-8 правильно, поэтому вы не сможете правильно видеть символы не ASCII.Чтобы решить эту проблему, вы должны щелкнуть правой кнопкой мыши строку заголовка окна командной строки, выбрать properties
и изменить шрифт на UNICODE.Consolas
, Lucida Console
и Courier New
должны работать.