Bat изменить кодировку файла

Обновлено: 07.07.2024

Кроме того в настройках собственно консольного окна необходимо выставить monospace шрифты типа TrueType ( Lucida Console, Consolas, Courier New etc). ( у меня нет Windows 10, может там уже и так всё нормально со шрифтами консольного окна )

имеем вот такой забавный листинг:

на первой PAUSE в свойствах окна указано
"Текущая кодовая страница
866 (OEM -русская)"

на второй PAUSE --
"Текущая кодовая страница
1251 (ANSI -русская)"

Уже интересно стало.
На десятке завтра буду, проверю.

Может в кавычки взять?
"C:\ъшЁшыышЎр\юўхэ№эєцэю.exe"
"C:\кириллица\оченьнужно.exe"

Far Manager, version 3.0 (build 3772) x86
Copyright © 1996-2000 Eugene Roshal, Copyright © 2000-2014 Far Group

Непосредственно ваш файл система отказалась запускать ("неизвестный издатель"), а когда я его "сохранил как" в новое имя -- то вторая строчка сработала, ура.

А не покажите, по доброте душевной, как вот в этой перекодировке будет выглядеть слово "Иван"? Потому что мне, в конце концов, нужно именно с папкой "Иван" работать.

Технология простая
берем farmanager
создаем файл, пишем текст
копируем. нажимаем f8 - вставляем.
20 лет так делаю.
механизма указания кодовой страницы не знаю.

Кстати, если я делаю "DIR > 1", то в этом файле "1" вижу все необходимые мне бракозяки вместо кириллицы в названии директории и фала. И если потом из этого файла ("1") сделать нужный мне bat-файл, то эти бракозяки отображаются в листинге обратно как кириллица. И батник работает.

Posted via ActualForum NNTP Server 1.5

Здесь файл, в котором бракозяки работают как кириллица, в следующем комменте -- бракозяки через копипасту (не работают).

Posted via ActualForum NNTP Server 1.5

вместо спасибо, научись читать то, что тебе пишут, тратят своё время.

может ты плохо видишь? тогда вот так:

далее, в тексте не то ANSI не то OEM, чтобы просто разобраться в кодовыми страницами в тексте и методом эксперимента, это будет быстрее, чем понять кодовые страницы установите себе notepad++ или farmanager и откройте файл на редактирование, и там методом копирования нормального текста вставляйте его после переключения в кодовые страницы, например в 866-ю. ну или в 1251

Как корректно отобразить Русский текст в CMD. Проблемы с кодировкой могут возникнуть, например, при выполнении Bat файла, когда нужно вывести в консоль русский текст и при других обстоятельствах, о которых речь пойдёт далее.

Рассмотрим пример: когда нужно вывести в консоль Русский текст, скажем «Примет мир». Для этого создадим Bat файл с именем «1.bat». Используйте для этого обычный Блокнот Windows (Notepad.exe) Запишем в него следующие строки!

Для тех, кто не понял или не в курсе, строчки «echo.» я добавил специально, что бы были отступы, от строки «Примет мир»

Теперь запускаем файл 1.bat и результат будет такого вида.

Русский текст в CMD

Как видим проблема с кодировкой в cmd на лицо. И произошло это по следующей причине.

Стандартный блокнот Windows сохранил Bat файл в кодировке «1251» а консоль вывела его в кодировки «866». Вот от сюда все проблемы!

Решения проблемы с кодировкой в CMD. 1 Способ.

Для решения проблемы нужно просто использовать текстовой редактор, с помощью которого можно сохранить текст в кодировке «866». Для этих целей прекрасно подходит «Notepad++» (Ссылку для загрузки Вы можете найти в моём Twitter-e).

Скачиваем и устанавливаем на свой компьютер «Notepad++».

После запуска «Notepad++» запишете в документ те же строки, которые мы уже ранние записывали в стандартный блокнот.

Теперь осталось сохранить документ с именем «2.bat» в правильной кодировке. Для этого идём в меню «Кодировки > Кодировки > Кириллица > OEM-866»

cmd сменить кодировку

и теперь сохраняем файл с именем «2.bat» и запускаем его! Поле запуска результат на лицо.

cmd смена кодировки

Как видим, текст на Русском в CMD отобразился, как положено.

Решения проблемы с кодировкой в CMD. 2 Способ.

Теперь рассмотрим ещё одну ситуацию, когда могут возникнуть проблемы с кодировкой в CMD.

Допустим, ситуация требует сохранить результат выполнения той или иной команды в обычный «TXT» файл. В приделах этого поста возьмём для примера команду «HELP».

Задача : Сохранить справку CMD в файл «HelpCMD.txt. Для этого создайте Bat файл и запишите в него следующие строки.

После выполнения Bat файла в корне диска «C:\» появится файл «HelpCMD.txt» и вместо справки получится вот что:

поменять кодировку cmd

Естественно, такой вариант не кому не понравится и что бы сохранить справку в понятном для человека виде, допишите в Bat файл строку.

Теперь содержимое кода будет такое.

После выполнения «Батника» результат будет такой:

поменять кодировку cmd

Вот так на много лучше, правда?

Пожалуй, на этом я закончу пост. Добавить больше нечего. Если у Вас имеются какие-то соображения по данной теме, буду рад Вашему комментарию к посту.

Дополнительно из комментариев то Garric

Автор очень хорошо описал принцип. ! Но это неудобно.
Нужно бы добавить. Если автор добавит это в статью то это будет Good.
Создаём файл .reg следующего содержания:
——
Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\.bat\ShellNew]
«FileName»=»BATНастроенная кодировка.bat»
——
Выполняем.
——
Топаем в %SystemRoot%\SHELLNEW
Создаём там файл «BATНастроенная кодировка.bat»
Открываем в Notepad++
Вводим любой текст. (нужно!) Сохраняемся.
Удаляем текст. Меняем кодировку как сказано в статье. Сохраняемся.
———-
Щёлкаем правой кнопкой мыши по Рабочему столу. Нажимаем «Создать» — «Пакетный файл Windows».
Переименовываем. Открываем в Notepad++. Пишем батник.
В дальнейшем при работе с файлом не нажимаем ничего кроме как просто «Сохранить». Никаких «Сохранить как».

Описание проблемы

Мой приятель делал диагностику репликации Active Directory и так как полученная диагностическая информация была объемной, он логично попытался сохранить ее в текстовый файл. Напоминаю делается, это вот по такой конструкции:

Тут > c:\temp\replsummary.log и есть функция вывода в файл.

При открытии файла он увидел вот такую абракадабры вместо русского текста:

Ќ з в бЎ®а ¤ ­­ле ¤«п бў®¤ЄЁ Ї® ९«ЁЄ жЁЁ, Ї®¤®¦¤ЁвҐ:
.

€б室­л© DSA ­ ЁЎ. ¤Ґ«мв бЎ®Ґў/ўбҐЈ® %% ®иЁЎЄ

Абракадабра в файле выгруженным из командной строки

Согласитесь, что это не очень красиво и читаемо.

Варианты устранения краскозябр в файле после экспорта из cmd

Первый вариант, это использование оболочки PowerShell. PowerShell умеет запускать большую часть утилит, к которым вы привыкли в командной строке, у него для этого есть алиасы в виде командлетов. Самое классное, что в отличии от cmd он сохраняет данные в нормальном виде, даже если они по русски. Для примера я выполню в PowerShell предыдущую команду;

В результате вы сразу можете оценить его преимущество и еще раз задуматься, чтобы использовать его.

Исправление кривой кодировки через PowerShell

Так же вы можете использовать командлет PowerShell под названием Out-File, он позволяет производить вывод полученных данных в виде файла, единственное не забываем указать нужное место, так же если места нет, вы его можете создать с помощью ключа -Force.

Убираем кракозябры в экспортируемом файле из cmd

Если же вы хотите использовать именно командную строку, то вам необходимо перед вашей командой или в скрипте в самом начале выполнить вот эти строки:

@echo off
chcp 855 (По умолчанию в командной строке стоит — 866 или 1251)

В результате чего на выходе я получил положительный результат и никакой абракадабры вместо русского текста я не увидел.

Настройка правильной кириллицы при экспорте текстового файла через командную строку

Вот пример бат файла, где я использовал кодировку chcp 855.

Применение кодировки 855 в сценариях командной строки

Убираем кракозябры через реестр

Идентификаторы кодовой страницы

В командной строке от имени администратора выполните команду по добавлению ключа:

REG ADD HKCU\Console\%SystemRoot^%_system32_cmd.exe /v CodePage /t REG_DWORD /d 855

Выглядеть это будет вот так

Убираем кракозябры через реестр

Так же создать ключ реестра можно и через PowerShell, вот такими командами:











Есть немало консольных утилит для перекодировки текста, но многие забывают про встроенные возможности.

Ещё до создания указанной темы я думал над решением этого вопроса теми же средствами и тоже дальше построчной обработки файлов пойти не смог. А хотелось бы обработать весь файл одним махом, что-то наподобие

То что не получилось одним махом (командой TYPE) можно сделать двумя: перекодировкой исходного файла в промежуточный файл в UTF-16, а затем промежуточного — в файл в нужной кодировке. В качестве кодировок исходного и конечного файла могут быть любые однобайтные кодировки, а также UTF-8 без BOM. В основе такого решения лежит соединение вместе уже упоминавшихся мною приёмов по перекодировке файлов в/из UTF-16 с помощью команды TYPE.

Может возникнуть вопрос: зачем здесь несколько команд объединены круглыми скобками в одну составную?
Отвечаю: В качестве кодировки как входного так и выходного файлов могут выступать не только однобайтные кодировки, но и UTF-8 (кодовая страница 65001), а работа командных файлов при переключении на неё, по крайней мере в более ранних изданиях Windows, например в XP, имеет одну неприятную особенность — они тихо завершают работу на следующей же команде, но текущая (в том числе, составная) команда всё-таки выполняется и если в конце неё переключится обратно на однобайтную кодировку, то вылета не произойдёт. Но переключение кодировок в составной команде не влияет на входящие в неё внутренние команды обработчика, поэтому, чтобы воспользоваться её плодами, необходимо команду вызывать через новую копию CMD.EXE с ключом /C. Это одна из причин, по которой таким образом вызывается вторая TYPE, но, собственно говоря, её всё-равно следовало бы вызывать таким образом, если учесть исчезающе малую возможность, что командный файл вызван из CMD.EXE, уже запущенного с ключом /U.

Еще по поводу UTF-8: Если она используется во входном файле, то он не должен содержать BOM, иначе в начале выходного будет лишний символ и как его обрезать мне на ум не приходит. Если она используется для выходного файла, то он создаются без BOM, но это легко обойти тем же путем что и при создании промежуточного файла в UTF-16.

Читайте также: