Форум программистов, компьютерный форум, киберфорум
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.62/749: Рейтинг темы: голосов - 749, средняя оценка - 4.62
1 / 1 / 0
Регистрация: 12.11.2009
Сообщений: 109

Русский язык в командной строке

04.09.2012, 19:37. Показов 147688. Ответов 84
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем ку.

Проблема в заголовке, собственно: вместо русского языка в bat-нике командой echo, я вижу всякую кракозябру.
Пробовал:
Bash
1
2
chcp 1251
chcp 886
Добавлять в реестр CodePage параметр
Ну никак просто. Кто знает, как починить?
Во вложении скрин работы bat-ника
Миниатюры
Русский язык в командной строке  
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
04.09.2012, 19:37
Ответы с готовыми решениями:

Английский язык в командной строке
Только что эксперементируя с кодировками, заметил прикол: если выставить кодировку 861 (Код: chcp 861), то вместо русского перевода cmd...

русский язык в командной строке visual studio x64
Здравствуйте, знаю проблема не новая, но у меня почему то если компилить файл через саму IDE, приписывая в мейне setlocale(LC_ALL,...

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

84
 Аватар для TolikD
117 / 81 / 36
Регистрация: 30.07.2017
Сообщений: 371
07.12.2019, 20:32
Студворк — интернет-сервис помощи студентам
Garry Galler,
Цитата Сообщение от Garry Galler Посмотреть сообщение
А если кажутся именно таковыми?
Вот именно, что только кажутся. Но не являются таковыми, при активном использовании, я бы просто так не постил.
Цитата Сообщение от Garry Galler Посмотреть сообщение
ты написал то, что и все и так знают
Я бы не написал, если бы тут было упоминание этого варианта. Я, к примеру, не увидел именно про UTF, поэтому внёс предложение добавить, хоть и немного поспешно.
0
 Аватар для volodin661
6809 / 2307 / 350
Регистрация: 10.12.2013
Сообщений: 7,956
07.12.2019, 21:01
Цитата Сообщение от Garry Galler Посмотреть сообщение
Каждый работающий с батниками знает как дважды два - используй батник в кодировке 866 и будет тебе счастье с выводом русского текста.
А вот и нет.
Я, помню, делал bat-гибрид то ли с c#, то ли с vb.net и при наличии русских литералов в исходнике в кодировке 866 он не компилировался. Вряд ли это можно засчитать за счастье.
1
 Аватар для TolikD
117 / 81 / 36
Регистрация: 30.07.2017
Сообщений: 371
07.12.2019, 22:30
Цитата Сообщение от ujif Посмотреть сообщение
у меня на винде 8.1 не работает
А, сорь, не увидел. Чтобы не раздражать окружающих, в отличие от моего примера можно использовать другой подобный метод, который тут также не указали.
В блокноте можно сохранять в кодировку ANSI, что в восьмерке и делается по-умолчанию. Затем, при запуске батника, меняем шрифт на любой другой, поддерживающий кириллицу "Меню - свойства - Шрифт - Lucida Console". Всё, шрифт запоминается.
Bash
1
2
3
4
@echo off
chcp 1251>nul
echo тест
pause
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
07.12.2019, 23:47
Цитата Сообщение от TolikD Посмотреть сообщение
в отличие от моего примера можно использовать другой подобный метод, который тут также не указали.
В разделе bat - примерно полсотни тем в которых упоминаются проблемы с кириллицей и рассказывается про Lucida Console и 1251.
В 21 веке люди все еще не умеют пользоваться поиском?
(в 21 веке люди все еще используют батники, вместо powershell! Это еще более удивительно, но не будем заострять на этом внимание).

Да, сам закрепленный туториал от Dragokas, возможно, немного стоило бы подкорректировать, добавив про магию смены установленных по умолчанию точечных шрифтов в cmd на Lucida Console или ему подобный TrueType шрифт.
Хотя, в том или ином виде все эти сведения о проблемах с кириллицей и способах их обхода и так есть в разных закрепленных FAQ и множестве пользовательских тем.

Пользователь YuS_2, в одной из таких тем как-то написал:
Это ведь давно уже известно, что наиболее правильное отображение символов при выбранном консольном шрифте TrueType.
Весь вопрос только в том, что это надо объяснить всем тем, кому будут передаваться пакетные файлы, ведь по умолчанию в консоли Windows выбран точечный шрифт и кодовая страница OEM (cp866)... но как показала практика, в большинстве случаев, оказалось проще написать пакетник в кодировке OEM и отдать его без каких-либо объяснений
C чем я абсолютно солидарен.

Просто люди их не читают. А снова и снова каждый раз создают новую тему, даже не попробовав воспользоваться поиском по форуму.
И по гамбургскому счету читать нужно не эти форумные FAQ, которые, естественно, никогда не будут полными, а, например, Джоэла Спольски "Что нужно знать о Юникоде", для того чтобы подобные вопросы получили хоть какой-то фундамент в головах вопрошающих и избавили их от наивности и невежества в понимании кодировок.


Цитата Сообщение от volodin661 Посмотреть сообщение
c#, то ли с vb.net и при наличии русских литералов в исходнике в кодировке 866 он не компилировался
Да, это очевидно. Гибриды - отдельная тема, я писал такие (bat+С#) либо в кодировке 1251 (если все символы только латиница), либо (если латиница + кириллица) как раз тот особый случай, когда без 65001 не обойтись и батник должен быть в UTF-8 без BOM.
0
 Аватар для volodin661
6809 / 2307 / 350
Регистрация: 10.12.2013
Сообщений: 7,956
08.12.2019, 00:28
Цитата Сообщение от Garry Galler Посмотреть сообщение
Весь вопрос только в том, что это надо объяснить всем тем, кому будут передаваться пакетные файлы, ведь по умолчанию в консоли Windows выбран точечный шрифт и кодовая страница OEM (cp866)... но как показала практика, в большинстве случаев, оказалось проще написать пакетник в кодировке OEM и отдать его без каких-либо объяснений
Цитата Сообщение от Garry Galler Посмотреть сообщение
C чем я абсолютно солидарен.
А я абсолютно не солидарен.
Это что ещё за практика такая?

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

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

И второе.
Если ты ничего не умеешь делать, читай не можешь обеспечить появление желаемого результата на удалённом компьютере,
значит не надо тебе пока ничего никуда передавать; сиди, учись.
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
08.12.2019, 01:13
Цитата Сообщение от volodin661 Посмотреть сообщение
имеется в виду условная автономная домохозяйка
Имеется ввиду условный пользователь, которому нужен условный батник(программа) для завершения некоего условного гештальта.
Таких примерно 90% в этом (или во всех?) разделе.
Вот что мы ту все (отвечающие) делаем?
Занимаемся либо психоанализом ( интерпретацией бессознательного (кода\мыслей) пациента), либо гештальт-терапией :-)
Либо и тем и другим.
И все мы что-то кому-то передаем. Мысли, опыт, знания... ну или батники, за неимением иной творческой валюты...

Но снабжать каждого вопрошающего еще и полной инструкцией по применению и "серебряной пулей" (чтобы работало везде и всегда) терпения хватит не у всякого отвечающего.
Ну да, можно еще вообще ничего делать... И пусть мир (юзеров) подождет...
0
 Аватар для volodin661
6809 / 2307 / 350
Регистрация: 10.12.2013
Сообщений: 7,956
08.12.2019, 01:16
бумажки люди всё время друг другу передают, бумажки. и беспокоятся только о них. до момента смерти. а возможно, что и после.
0
 Аватар для TolikD
117 / 81 / 36
Регистрация: 30.07.2017
Сообщений: 371
08.12.2019, 10:35
Garry Galler, из всего этого разговора, у меня возникает только один вопрос. В каких случаях UTF в консоли вызывает проблемы при использовании кириллицы? К примеру, для windows 7.
0
 Аватар для volodin661
6809 / 2307 / 350
Регистрация: 10.12.2013
Сообщений: 7,956
08.12.2019, 13:27
Кириллица тут не при чём.
Сам по себе режим Юникода после chcp 65001 в консольном окне интерпретатора cmd имеет массу ошибок.
0
 Аватар для TolikD
117 / 81 / 36
Регистрация: 30.07.2017
Сообщений: 371
08.12.2019, 15:18
volodin661, так а если все задачи в рамках работы с кириллицей, то проблем получается нет?

Добавлено через 11 минут
Дело в том, что я не сталкивался с ошибками при использовании UTF-8
- echo
- аргументы при запуске
- ввод строки с помощью set /p
- работа со строками с помощью for
- файлы с именем на кириллице: copy, del, ren
0
 Аватар для volodin661
6809 / 2307 / 350
Регистрация: 10.12.2013
Сообщений: 7,956
08.12.2019, 15:36
Я не могу взять на себя такую ответственность и сказать, что гарантирую отсутствие проблем )

Теоретически, если ввод/вывод cmd реализован с помощью Windows Console API* ( a, скорее всего, это так и есть ),
то проблем быть не должно.

Другое дело, что нет НИКАКИХ причин использовать для автоматизации через ком. строку cmd, если windows у тебя версии 7 и новее.




(*) Другим вариантом, например, может быть ввод / вывод в приложении, использующим CRTL ( Run time библиотека языка C )

Добавлено через 4 минуты
Я даже так скажу, если какое-то приложение использует Win Console API для ввода/вывода, то ему абсолютно фиолетово,
какая там будет назначена кодовая страница в консоли, русские буквы будут всё равно видны.

Готов это продемонстрировать.
1
 Аватар для TolikD
117 / 81 / 36
Регистрация: 30.07.2017
Сообщений: 371
08.12.2019, 15:51
Цитата Сообщение от volodin661 Посмотреть сообщение
то ему абсолютно фиолетово
Вот это очень интересно. У меня-то необходимость в смене кодировки связана с вызовом из PHP system('script.cmd')
И как же может библиотека Си?
0
 Аватар для volodin661
6809 / 2307 / 350
Регистрация: 10.12.2013
Сообщений: 7,956
08.12.2019, 16:12
Про возможности в этом смысле, которые есть в PHP, я ничего тебе не расскажу. Не знаю.

Про Perl бы рассказал.
0
 Аватар для TolikD
117 / 81 / 36
Регистрация: 30.07.2017
Сообщений: 371
08.12.2019, 17:45
Я сейчас попробую резюмировать тему, потому как вопрос состоит в том, что возникают вопросы, что делать в том или ином случае. Из-за этого у ведущих и возникает протест.

Добавлено через 39 минут
Примерно так.

Если не прибегая к сторонним средствам, нужно использовать блокнот Windows с кириллицей, можно просто использовать код:
- для кодировки ANSI (она же кодировка windows, win1251, cp1251)
Windows Batch file
1
2
3
@echo off
chcp 1251 >nul
echo Текст
- для кодировки UTF-8
Windows Batch file
1
2
3
@echo off
chcp 65001 >nul
echo Текст
Метод работает для многих базовых команд в Windows 7,8,8.1,10 и возможно, в серверных версиях системы (не проверялось).
При этом в версиях ниже Windows 10 с некоторыми оговорками.

Возможные проблемы:
Кликните здесь для просмотра всего текста
1. Windows 10 - не требует правок, просто сохраняем в блокнот, консоль определяет кодировку автоматически.
Единственное условие: сохраняемая кодировка в блокноте должна соответсвовать устанавливаемой chcp.

2. Windows 7-8.1

2а) если при запуске в консоле кракозябры, либо вместо echo выводит ошибку "The system cannot write to the specified device.", скорей всего установлен точечный шрифт
Меняем его на любой TrueType с поддержкой кириллицы (например Lucida Console) "Меню - Свойства - Шрифт - Lucida Console"

2б) при сохранении в UTF-8 в данных системах блокнот добавляет в начало файла информацию о кодировке BOM (3 байта)
При запуске в первой строке команда выполнится с ошибкой.

В данном случае можно просто выполнить пропуск первой строки, либо зачистить вывод после ошибки.
метод
Windows Batch file
1
2
3
4
:: тут пустая строка
@echo off
chcp 65001 >nul
...
либо
Windows Batch file
1
2
3
4
&cls
@echo off
chcp 65001 >nul
...
2в) Также, как и в windows 10, кодировка блокнота = кодировка chcp

3. При выполнении команд, либо вызове других скриптов в DOS кодировке нужно соответсвенно использовать переключение в 866:
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
chcp 65001 >nul
...
:: меняем для корректного отображения в DOS
chcp 866 >nul
 
call doscode.cmd
 
:: вывод команды pause в кириллице
pause
 
chcp 65001 >nul
:: возвращаемся к UTF
...


Добавлено через 4 минуты
Думаю, достаточно исчерпывающе привёл вопросы, остальное - детали
0
4340 / 2130 / 661
Регистрация: 26.04.2015
Сообщений: 6,823
08.12.2019, 23:11
Цитата Сообщение от TolikD Посмотреть сообщение
я не сталкивался с ошибками при использовании UTF-8
а я с первой же команды:
2
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
09.12.2019, 01:17
Цитата Сообщение от alpap Посмотреть сообщение
а я с первой же команды:
Кстати, да.
---------------------------------------------------------------------------
Вот вам и один из примеров глюкавого поведения cmd команд\утилит при попытке использования кодовой страницы 65001.
Ответ на это поведение есть: (из топика по обсуждению ошибки Not enough memory на сайте microsoft):
You are likely using a different code-page, probably Unicode. You can verify this by running the chcp command (with no arguments). It will probably return 65001 (UTF-8).

Now try switching to CP437 (by running chcp 437) and then run more.com. It should work now.

It seems that using a Unicode code-page breaks some functionality. It is likely that the more command was not updated to support multi-byte character sets, so unfortunately, you will have to stick with another code-page.
Быстрый гугл-перевод:
Кажется, что использование кодовой страницы Unicode нарушает некоторые функции. Вполне вероятно, что команда more не была обновлена для поддержки многобайтовых наборов символов, поэтому, к сожалению, вам придется придерживаться другой кодовой страницы.


Пофиксили ли это поведение more в windows 10? И одна ли more имеет такие проблемы?
0
4340 / 2130 / 661
Регистрация: 26.04.2015
Сообщений: 6,823
09.12.2019, 01:37
Garry Galler, там далеко не только more
например тут будет ошибка или даже вылет - не помню
Windows Batch file
1
<file.txt (for /f "delims=" %%a in ('more') do @echo %%a)
а так нет
Windows Batch file
1
for /f "delims=" %%a in (file.txt) do echo %%a
много еще чего попадалось, но именно все вроде специально так, как чтобы мне было непривычно или неудобно после выработанного для себя стиля оформления кода.
0
 Аватар для volodin661
6809 / 2307 / 350
Регистрация: 10.12.2013
Сообщений: 7,956
09.12.2019, 06:46
Если посмотреть на утилиту more, которая падает стремительным домкратом с ошибкой Not Enough Memory,
то можно увидеть, что она more.com, а не more.exe.

И сдаётся мне, что сей пейджер написан давным-давно на ассемблере и вовсе без учёта UTF-8, a лишь
с учётом UCS-2 и ANSI.

Вторым героем является команда copy, которая тоже падает, но не сразу и с диагностикой invalide handle
и сдаётся мне, что вот она как раз не пользует WinConsole API, a задействует CRTL для ввода-вывода.

Безупречной является лишь одна команда type.
0
 Аватар для TolikD
117 / 81 / 36
Регистрация: 30.07.2017
Сообщений: 371
09.12.2019, 12:06
Цитата Сообщение от alpap Посмотреть сообщение
а я с первой же команды:
Вот с этого и надо было начинать. На сколько я понимаю это проблемы именно win 7.
Цитата Сообщение от Garry Galler Посмотреть сообщение
Пофиксили ли это поведение more в windows 10?
пофиксили ещё в win 8
Но только если это кодировка UTF, с ANSI таких проблем нет win7+. На крайняк я бы не использовал команду more для windows 7, а делал бы просмотр в том же блокноте например ))
Windows Batch file
1
2
3
4
@echo off
chcp 65001
notepad file.txt
pause
Цитата Сообщение от alpap Посмотреть сообщение
Windows Batch file
1
<file.txt (for /f "delims=" %%a in ('more') do @echo %%a)
А это я вообще не понимаю, как должно работать, оно будет вылетать в любом случае с utf или без.
Цитата Сообщение от volodin661 Посмотреть сообщение
Безупречной является лишь одна команда type.
выходит, да
0
6 / 7 / 0
Регистрация: 13.11.2016
Сообщений: 21
09.12.2019, 15:27
повторю свой пост:
Code
1
2
3
4
5
::меняем шрифт и размер CMD окна на Lucida Console и 16 пиксель
Reg.exe add "HKCU\Console\%%SystemRoot%%_system32_cmd.exe" /v "FontSize" /t REG_DWORD /d "1048576" /f
Reg.exe add "HKCU\Console\%%SystemRoot%%_system32_cmd.exe" /v "FaceName" /t REG_SZ /d "Lucida Console" /f
Reg.exe add "HKCU\Console\%%SystemRoot%%_system32_cmd.exe" /v "FontFamily" /t REG_DWORD /d "54" /f
Reg.exe add "HKCU\Console\%%SystemRoot%%_system32_cmd.exe" /v "FontWeight" /t REG_DWORD /d "400" /f
поясню:
запускаем cmd
открывается терминальное окно
это окно управляется параметрами из реестра текущего пользователя - переменной %SystemRoot%_system32_cmd.exe
в ветке HKEY_CURRENT_USER\Console\

строки из кода:
- первый: размер шрифта 16 пикселей
- второй: используем шрифт Lucida Console (он векторный и русский в консоле)

еще можно накатить такое:
Code
1
2
::фиксируем CMD окно в левом верхнем углу
Reg.exe add "HKCU\Console\%%SystemRoot%%_system32_cmd.exe" /v "WindowPosition" /t REG_DWORD /d "1638406" /f
закрепляем окно в правом верхнем углу - если такой строки нет, то каждое последующее cmd-окно будет открываться немного ниже и левее предыдущего (лесенкой)

Добавлено через 6 минут
ЗЫ. левый верхний угол .. потом идет смещение вправо- вниз
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
09.12.2019, 15:27
Помогаю со студенческими работами здесь

Русский язык в строке ошибок компилятора
Подскажите, как изменить язык отчета об ошибках с английского на русский? Программа Dev C++. с русским языком в консоле разобрался, а...

Xcode , С++ и русский язык: как вывести в файл русский текст без сбитой кодировки?
Как сделать так, чтобы после некоторых манипуляций в файл выводился русский текст без сбитой кодировки?

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

Русский язык
В общем у меня такая проблема , имеется код , в котором нужно что бы выводились русские буквы (имеется ввиду что без setlocale русские...

Русский язык
Здравствуйте! Я практикуюсь в создании веб сайтов. Когда я писал сайт и тестировал его на локальном сервере, то всё работало хорошо, но...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
80
Ответ Создать тему
Новые блоги и статьи
Гайд, как ворваться в вайб-кодинг в мае 2026
Noname2331 17.05.2026
Простите за получившееся полотно текста, я даже не знаю, как его разбить на главы. Тут, что называется, ни добавить ни убавить, одна сцена одним дублем. На моих глазах недавно случилось чудо. Как. . .
[golang] Алгоритм «Хак Госпера»
alhaos 17.05.2026
Алгоритм «Хак Госпера» Хак Госпера (Gosper's Hack) — алгоритм нахождения следующего по величине числа с тем же количеством установленных бит. Придуман Биллом Госпером в 1970-х, опубликован в. . .
Рисование бинарного древа до 6-го колена на js, svg.
russiannick 17.05.2026
<svg width="335" height="240" viewBox="0 0 335 240" fill="#e5e1bb"> <style> <!]> </ style> <g id="bush"> </ g> </ svg> function fn(){ let rost;/ / высота древа let xx=165,yy=210,w=256;
FSharp: interface of module
DevAlt 16.05.2026
Интерфейс модуля F# позволяет управлять доступностью членов, содержащихся в реализации модуля. По-умолчанию все члены модуля доступны: module Foo let x = 10 let boo () = printfn "boo" . . .
Хитросплетение родственных связей пантеона греческих богов.
russiannick 14.05.2026
Однооконник, позволяющий узреть и изучить отдельных героев древней Греции. <!DOCTYPE html> <html lang="ru"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible". . .
[golang] Угол между стрелками часов
alhaos 12.05.2026
По заданным значениям часа и минуты необходимо определить значение меньшего угла между стрелками аналогового циферблата часов. import "math" func angleClock(hour int, minutes int) float64 { . . .
Debian 13: Установка Lazarus QT5
ВитГо 09.05.2026
Эта инструкция моя компиляция инструкций volvo https:/ / www. cyberforum. ru/ blogs/ 203668/ 10753. html и его же старой инструкции по установке Lazarus с gtk2. . .
Нейросеть на алгоритме "эстафета хвоста" как перспектива.
Hrethgir 06.05.2026
На десерт, когда запущу сервер. Статья тут https:/ / habr. com/ ru/ articles/ 1030914/ . Автор я сам, нейросеть только помогает в вопросах которые мне не известны - не знаю людей которые знали-бы. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru