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 на лицо. И произошло это по следующей причине.
Стандартный блокнот Windows сохранил Bat файл в кодировке «1251» а консоль вывела его в кодировки «866». Вот от сюда все проблемы!
Решения проблемы с кодировкой в CMD. 1 Способ.
Для решения проблемы нужно просто использовать текстовой редактор, с помощью которого можно сохранить текст в кодировке «866». Для этих целей прекрасно подходит «Notepad++» (Ссылку для загрузки Вы можете найти в моём Twitter-e).
Скачиваем и устанавливаем на свой компьютер «Notepad++».
После запуска «Notepad++» запишете в документ те же строки, которые мы уже ранние записывали в стандартный блокнот.
Теперь осталось сохранить документ с именем «2.bat» в правильной кодировке. Для этого идём в меню «Кодировки > Кодировки > Кириллица > OEM-866»
и теперь сохраняем файл с именем «2.bat» и запускаем его! Поле запуска результат на лицо.
Как видим, текст на Русском в CMD отобразился, как положено.
Решения проблемы с кодировкой в CMD. 2 Способ.
Теперь рассмотрим ещё одну ситуацию, когда могут возникнуть проблемы с кодировкой в CMD.
Допустим, ситуация требует сохранить результат выполнения той или иной команды в обычный «TXT» файл. В приделах этого поста возьмём для примера команду «HELP».
Задача : Сохранить справку CMD в файл «HelpCMD.txt. Для этого создайте Bat файл и запишите в него следующие строки.
После выполнения Bat файла в корне диска «C:\» появится файл «HelpCMD.txt» и вместо справки получится вот что:
Естественно, такой вариант не кому не понравится и что бы сохранить справку в понятном для человека виде, допишите в Bat файл строку.
Теперь содержимое кода будет такое.
После выполнения «Батника» результат будет такой:
Вот так на много лучше, правда?
Пожалуй, на этом я закончу пост. Добавить больше нечего. Если у Вас имеются какие-то соображения по данной теме, буду рад Вашему комментарию к посту.
Дополнительно из комментариев то 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 под названием Out-File, он позволяет производить вывод полученных данных в виде файла, единственное не забываем указать нужное место, так же если места нет, вы его можете создать с помощью ключа -Force.
Если же вы хотите использовать именно командную строку, то вам необходимо перед вашей командой или в скрипте в самом начале выполнить вот эти строки:
@echo offchcp 855 (По умолчанию в командной строке стоит — 866 или 1251)
В результате чего на выходе я получил положительный результат и никакой абракадабры вместо русского текста я не увидел.
Вот пример бат файла, где я использовал кодировку chcp 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.
Читайте также: