Форум программистов, компьютерный форум, киберфорум
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.92/64: Рейтинг темы: голосов - 64, средняя оценка - 4.92
207 / 194 / 67
Регистрация: 09.02.2016
Сообщений: 1,001
1

Кодировка в CMD

19.02.2017, 18:35. Просмотров 12347. Ответов 18
Метки нет (Все метки)

Не понимаю!!!!!!!Бат файл создаю через блокнот.
Почему когда я в окне командной строке набираю susteminfo,то у меня вся информация выводится на русском.А если я прописываю эту команду в блокноте и пытаюсь вывести ее в файл,то получаются крокозябры.Пробывал так :
Windows Batch file
1
for /f "delims=" %%A in ('systeminfo') do >nul chcp 1251& echo %%A>>2.txt
Тоже не выходит.Читал тему про русский язык в командных файлах.Оттуда собственно и пример.Но не работает.

Объясните пожалуйста.

Пытался через notepad++.Создавал файл в 866 кодировке.Такая же ерунда.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.02.2017, 18:35
Ответы с готовыми решениями:

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

Запуск cmd файла с определенного места в его коде из другого cmd файла
Здравствуйте. Требуется команда для запуска батника с метки внутри него, а не с первой команды в...

Batch (CMD/BAT) несколько заданий на CMD/BAT
1.Напишите bat файл на диске с ,который будет искать на всех дисках файлы с расширением...

Отличие CMD в Windows 7 от CMD в Windows XP
Вообщем из за чего данная моя помощь отрабатывает в XP, но не работает в вин 7 ?...

18
Любознательный
1255 / 681 / 207
Регистрация: 10.03.2016
Сообщений: 1,624
19.02.2017, 18:41 2
Цитата Сообщение от ZoOoO Посмотреть сообщение
пытаюсь вывести ее в файл,то получаются крокозябры.
Как создать Batch-файл [Руководство]
Windows Batch file
1
systeminfo >text.txt
Сохраненный файл тоже будет в кодировке OEM
0
207 / 194 / 67
Регистрация: 09.02.2016
Сообщений: 1,001
19.02.2017, 18:46  [ТС] 3
Цитата Сообщение от YuS_2 Посмотреть сообщение
Windows Batch file
1
systeminfo >text.txt
1.Начнем с того,что там будет последняя строка команды.
2.Я не могу найти ответ на мой вопрос в Вашей сылке.
Я создавал через нотепад++ батник с кодировкой 866.Все равно в файл сохраняются крокозябры=(
0
600 / 232 / 98
Регистрация: 17.03.2014
Сообщений: 611
19.02.2017, 18:48 4
Цитата Сообщение от ZoOoO Посмотреть сообщение
Начнем с того,что там будет последняя строчка команды.
ложь
0
207 / 194 / 67
Регистрация: 09.02.2016
Сообщений: 1,001
19.02.2017, 18:52  [ТС] 5
Цитата Сообщение от b0gus Посмотреть сообщение
ложь
Виноват.Но крокозябры все равно не побеждены=(
0
3268 / 2499 / 874
Регистрация: 28.10.2013
Сообщений: 6,579
19.02.2017, 18:55 6
Windows Batch file
1
2
chcp 1251
systeminfo>system.txt
0
600 / 232 / 98
Регистрация: 17.03.2014
Сообщений: 611
19.02.2017, 18:56 7
попробуйте так:
Windows Batch file
1
2
@echo off
>nul chcp 866 & >systeminfo.txt (for /f "delims=" %%v in ('systeminfo') do echo:%%v)
0
207 / 194 / 67
Регистрация: 09.02.2016
Сообщений: 1,001
19.02.2017, 19:13  [ТС] 8
Цитата Сообщение от YuS_2 Посмотреть сообщение
Как создать Batch-файл [Руководство]
ИнтересноПолучилось.
Вариант 3. Через консоль копированием данных с устройства con (клавиатура)
Запуск консоли (все аналогично способу 2 (см. выше).
Пишем команду:
Bash
copy con myproga.cmd
Пишем содержимое нашего бат-файла. Ввод каждой строки подтверждаем клавишей {ENTER}.
Bash
@echo off
echo This batch file
pause
Нажимаем Ctrl + Z, затем клавишу Enter.
Запускаем на исполнение созданный бат-файл:
Bash
myproga
Вариант 3.1. Через консоль, используя команду more (спасибо MihaniX)
Пишем команду:
Bash
more > myproga.cmd
Пишем содержимое нашего бат-файла. Ввод каждой строки подтверждаем клавишей {ENTER}.
Bash
@echo off
echo This batch file
pause
Нажимаем Ctrl + C (либо Ctrl + Z и клавишу Enter).
Запускаем на исполнение созданный бат-файл:
Bash
myproga
Добавлено через 4 минуты
Garry Galler
Хм.Я вроде и так пробывал.Похоже я не на тот батник жал,после редактирования...

Добавлено через 7 минут
Windows Batch file
1
2
3
4
@echo off
systeminfo|findstr /c:"Версия ОС"
systeminfo|findstr /c:"Версия BIOS"
pause
А это как победить в блокноте?

Добавлено через 5 минут
А почему в обще это так получается.
Все что я понял это то что окно в смд работает в 866 кодировке.А дальше я не понимаю.Блокнот сохраняет в кодировке 1251.
Что означает:
chcp 1251
chcp 866
Что происходит после этих команд.Только не надо говорить.что меняется кодировка.Я это и не понимаю.
0
3268 / 2499 / 874
Регистрация: 28.10.2013
Сообщений: 6,579
19.02.2017, 20:04 9
Вариант с переключением chcp 1251 на XP, я так понимаю, не сработает. Поэтому на форуме есть более сложные способы - с перекодировкой непосредственно текстового файла.
Цитата Сообщение от ZoOoO Посмотреть сообщение
А это как победить в блокноте?
А что не так? Да, 866 он не умеет читать - поэтому блокнотом и не пользуются, заменяя другими текст. редакторами.
Цитата Сообщение от ZoOoO Посмотреть сообщение
Что означает:
chcp 1251
chcp 866
Что происходит после этих команд.Только не надо говорить.что меняется кодировка.Я это и не понимаю.
Если кратко и про простому, то консоль - обычное приложение и команда chcp просто указывает какую кодовую страницу\charset (у каждой есть свой уникальной номер, текстовое имя и т.д.) использовать, то есть каким образом приложение должно декодировать набор байтов (то, что понимает машина), чтобы вывести набор соответствующих символов (то, что понимает человек). Текст на компьютере - это байтовый код. Кодировка (кодовая страница, charset) - ключ к нему. Укажем неверную кодировку - получим неверную расшифровку, потому что у каждого байта (набора байтов), представляющих символ, может быть много символьных вариаций в зависимости от принадлежности к конкретному набору символов\character set (именуемому часто просто кодировкой) юникода.
Можешь поискать в инете книгу Джоэла Спольски "О программировании" - там очень много полезных вещей описано, в том числе и о кодировках.
0
207 / 194 / 67
Регистрация: 09.02.2016
Сообщений: 1,001
19.02.2017, 21:12  [ТС] 10
Цитата Сообщение от Garry Galler Посмотреть сообщение
у каждого байта (набора байтов)
Я как понимаю набора из 8 бит.1 байт это 1 символ.
то есть блокнот у нас всегда сохраняет в кодировке 1251.Окно смд у нас работает в 866 кодировке.Набор байтов заносится в блокнот.Блокнот этот набор файлов расшифровывает кодировкой 1251 и отображает в кодировке 1251,а из-за того что русские буквы в 866 кодировке имеют другое расположение битов в отличие от 1251,то и блокнот нам выводит крокозябры.
Значит надо сделать так,что бы окно было в нужной кодировке.Для этого и существует команда chcp?Мы меняем кодировку на 1251.И Окно уже расшифровывает выводимые символы в кодировке 1251.То есть может расшифровать те символы которые были сохранены в блокноте.А почему тогда не работает вот это?
Windows Batch file
1
2
3
4
@echo off
chcp 1251
echo привет
pause
Но работает ,если в окне переключить кодировку,а потом запустить батник:
Windows Batch file
1
2
3
@echo off
echo привет
pause
Добавлено через 11 минут
Цитата Сообщение от ZoOoO Посмотреть сообщение
Вариант 3. Через консоль копированием данных с устройства con (клавиатура)
Тут понятно.Это типа нотепада++ который сохраняет бат файл в 866 кодировке.
0
3268 / 2499 / 874
Регистрация: 28.10.2013
Сообщений: 6,579
19.02.2017, 21:40 11
Цитата Сообщение от ZoOoO Посмотреть сообщение
у каждого байта (набора байтов)
Я как понимаю набора из 8 бит.1 байт это 1 символ.
Имелось ввиду то, что кодировки могут быть как однобайтовые, так и многобайтовые (на один символ - 2\4\6 байт).

Цитата Сообщение от ZoOoO Посмотреть сообщение
А почему тогда не работает вот это?
Не знаю. У меня работает, но "когда двое делают одно и тоже, это не одно и тоже" :-)
Я же не могу видеть какую именно последовательность действий ты производишь - у чего именно ты меняешь кодировку.
Но должно быть так:
1) если файл сохранен в OEM 866 и мы не переключаем кодировку консоли на 1251 (ни в файле, ни в окне), вывод кириллического текста из батника будет правильный.
2) если файл сохранен в OEM 866 и мы переключаем кодировку на 1251 - вывод кириллического текста из батника будет неправильный.
Кодировка консоли должна в данном случае соответствовать кодировке файла - иначе кракозябры, как результат неверного декодирования.
0
207 / 194 / 67
Регистрация: 09.02.2016
Сообщений: 1,001
19.02.2017, 21:44  [ТС] 12
Я запускаю на сам батник.Вылезает окно.Вместо привет-крокозябры.
Хотя команда chcp 1251 стоит.
А если запустить окно смд.Поменять в нем кодировку и запустить батник из окна.То все выводится нормально.Вот про что я)
0
3268 / 2499 / 874
Регистрация: 28.10.2013
Сообщений: 6,579
19.02.2017, 22:24 13
ZoOoO,
Я тебе написал как оно должно работать. Кодировку своего файла (батника) ты не озвучил, а именно это имеет значение в первую очередь. И неизвестно как (чем) ты сохраняешь файл, что опять же не дает оснований даже предположить в каком именно виде у тебя находится слово "привет" в файле. Ты в чем-то допускаешь ошибку, поэтому получаешь разные результаты.
0
207 / 194 / 67
Регистрация: 09.02.2016
Сообщений: 1,001
19.02.2017, 22:26  [ТС] 14
Блокнот обычный.Нотепад++не рассматриваю,потому что там все понятно.С блокнотом хочется научится работать.
Я,беру блокнот.Обычный.
Пишу там код:
Windows Batch file
1
2
3
4
@echo off
chcp 1251         <<<-----------------поменял кодировку
echo привет
pause
Сохраняю.
Кликаю по сохраненному бат файлу.Запускается мой бат файл и вместо нормальных букв я вижу крокозябры.Хотя кодировку я поменял.

Потом.Если открыть окно смд через ярлык смд.И работая в окне изменить кодировку,а потом из того же окна запустить батник.То крокозябр нет.
0
3268 / 2499 / 874
Регистрация: 28.10.2013
Сообщений: 6,579
19.02.2017, 22:51 15
Цитата Сообщение от ZoOoO Посмотреть сообщение
Потом.Если открыть окно смд через ярлык смд
С этого и надо было начинать.
Скорей всего так: у тебя в ярлыке на cmd запускается экземпляр консоли у которой в свойствах стоит шрифт Lucida Console, который кириллицу поддерживает. А при клике на батник запускается экземпляр консоли у которой стоит в свойствах точечный шрифт, который кириллицу не поддерживает.
Проверяй.

Потому что у меня (как и должно ) выводится нормально в обоих случаях.
Кодировка в CMD
0
207 / 194 / 67
Регистрация: 09.02.2016
Сообщений: 1,001
19.02.2017, 23:00  [ТС] 16
Ну да.Я менял шрифт окна смд который запускаешь через ярлык.
Ну да.Шрифт меняешь и крокозябры пропадают.ПРоблема в том,что допустим если у человека шрифт стоит точечный и кодировка не сменится получается.
0
3268 / 2499 / 874
Регистрация: 28.10.2013
Сообщений: 6,579
19.02.2017, 23:24 17
Цитата Сообщение от ZoOoO Посмотреть сообщение
ПРоблема в том,что допустим если у человека шрифт стоит точечный и кодировка не сменится получается.
Кодировка и шрифт - не одно и тоже. Кодировка сменится - просто консоль все равно не сможет вывести кириллицу в этой кодировке правильно из-за того что виндовые "растерные (точечные) шрифты работают с русским корректно ТОЛЬКО в 866-й кодовой странице". Поэтому кодировку 1251 в bat-файлах стараются и не использовать, кодируя все в 866.
0
207 / 194 / 67
Регистрация: 09.02.2016
Сообщений: 1,001
19.02.2017, 23:47  [ТС] 18
А шрифты менять с помощью команд можно?
0
2698 / 1231 / 212
Регистрация: 10.12.2013
Сообщений: 4,164
20.02.2017, 04:02 19
Цитата Сообщение от ZoOoO Посмотреть сообщение
А шрифты менять с помощью команд можно?
простой ответ - нет.

я, помню, исследовал этот вопрос;

если развёрнутый ответ, то так:
в принципе командами шрифт меняется,
но без последующей перезагрузки Уиндус эффекта нет.
=====
У меня была задача подсунуть Уиндус консольный monospace шрифт,
который бы показывал в консоли все диапазоны Юникода, как это есть в MacOS.

Но, увы, шрифт в системах одинаковый( одной и той же фирмы / версии / размера ),
только в MacOS всe диапазоны показывает, а в Windows видишь дулю с маком в виде знаков вопросов.

почему - непонятно.

Добавлено через 2 минуты
Надеюсь, в десятке эту херню таки устранят.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.02.2017, 04:02

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

Считывание данных с cmd windows 7(кодировка)
Пишу метод, его задача отправить команду в cmd и считать что она выведет. Вот сам код: public...

Посылка команды через cmd: кодировка
java программа просит ввести строку, после чего выполняет команду msg * &quot;stroka&quot; (выводит сообщение...

Некорректная кодировка в переменных при запуске скрипта Powershell из CMD
Добрый день! Столкнулся с очень странной ситуацией. Получаю через curl данные с веб-сайта на...

Восстановление значений cmd [cmd, ooov.net]
Здравствуйте, Столкнулся с такой проблемой, при запуске Windows открывался cmd и осуществлялся...


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

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.