healer
Администратор
Из: Москва
Сообщения: 24467
|
|
Вывод русского текста из команд bat / cmd |
|
Послано: 18-05-2015 10:54 |
|
|
По почте был задан вопрос о том, как выводить русский текст из bat / cmd файлов.
Возможно, эта информация будет полезна и для других. Часть своих ответов и не только помещаю сюда.
~~~~~~~~~~~~
Здоровья Вам. Духовного и физического.
|
healer
Администратор
Из: Москва
Сообщения: 24467
|
|
Вывод русского текста из команд bat / cmd |
|
Послано: 18-05-2015 10:58 |
|
|
При выводе русских букв необходимо помнить о кодировке.
Текст сообщения т.е сам bat / cmd должен быть в DOS (866) кодировке.
Многие текстовые редакторы его поддерживают.
Однако это не всегда удобно.
Раасмотрим необходимые действия если необходимо, что бы кодировка самого bat / cmd файла была в WIN (1251) и при этом корректно выводить русские буквы, например, командой echo.
~~~~~~~~~~~~
Здоровья Вам. Духовного и физического.
|
healer
Администратор
Из: Москва
Сообщения: 24467
|
|
Вывод русского текста из команд bat / cmd |
|
Послано: 19-05-2015 06:02 |
|
|
Для смены кодировок есть команда chcp и, казалось бы такой код приведет к желаемому результату
rem НЕ ВЕРНО
chcp 1251 >NUL
title Русский текст
chcp 866 >NUL
pause
Результат разочарует.
~~~~~~~~~~~~
Здоровья Вам. Духовного и физического.
|
healer
Администратор
Из: Москва
Сообщения: 24467
|
|
Вывод русского текста из команд bat / cmd |
|
Послано: 19-05-2015 06:46 |
|
|
Но не все так густно.
Внесем небольшие изменения в пример, приведенный выше
chcp 1251 >NUL
set x=Не ждите чуда, чудите сами
chcp 866 >NUL
title %x%
pause
Теперь русские буквы отразятся корректно.
~~~~~~~~~~~~
Здоровья Вам. Духовного и физического.
|
healer
Администратор
Из: Москва
Сообщения: 24467
|
|
Вывод русского текста из команд bat / cmd |
|
Послано: 19-05-2015 06:49 |
|
|
Аналогично команде title из предыдущего примера можно использовать команду echo.
Что бы каждый раз не переключать кодировки удобно такие сообщения собрать в блок.
chcp 1251 >NUL
set MSG01=Отсутствует исходный файл
set MSG02=Ошибка копирования
set MSG03=Успешное завершение программы
set TIT=Копирование файла
chcp 866 >NUL
Title %TIT%
....
echo %MSG01%
....
echo %MSG02%
....
echo %MSG03%
~~~~~~~~~~~~
Здоровья Вам. Духовного и физического.
|
healer
Администратор
Из: Москва
Сообщения: 24467
|
|
Вывод русского текста из команд bat / cmd |
|
Послано: 19-05-2015 07:01 |
|
|
Если такой блок получается достаточно большой, то, как мне кажется, не очень нагляно оставлять его в начале файла.
В таком случае можно из такого болка образовать процедуру, разместить в конце bat файла, а на исполнение вызвать эту процедуру командой call в начале bat файла. Из примера все должно стать понятнее))
....
call :blockmsg
Title %TIT%
....
echo %MSG01%
....
echo %MSG02%
....
echo %MSG03%
....
exit
:blockmsg
chcp 1251 >NUL
set MSG01=Отсутствует исходный файл
set MSG02=Ошибка копирования
set MSG03=Успешное завершение программы
set TIT=Копирование файла
chcp 866 >NUL
exit /b
~~~~~~~~~~~~
Здоровья Вам. Духовного и физического.
|
healer
Администратор
Из: Москва
Сообщения: 24467
|
|
Вывод русского текста из команд bat / cmd |
|
Послано: 19-05-2015 07:07 |
|
|
Следующий пример так же приведет к желаемому результату.
Как мне кажется, это менее наглядно и потребует несколько больше времени исполнения.
chcp 1251 >nul
for /f "delims=" %%A in ("Отойдите на безопасное расстояние") do >nul chcp 866& echo.%%A
~~~~~~~~~~~~
Здоровья Вам. Духовного и физического.
|
healer
Администратор
Из: Москва
Сообщения: 24467
|
|
Вывод русского текста из команд bat / cmd |
|
Послано: 21-08-2015 06:08 |
|
|
Проблемы с русским буквами могут возникать не только при выводе текста, но и при обработке файлов, в имени и (или) пути к которым эти буквы присутствуют.
Проблема имеет аналогичное решение.
~~~~~~~~~~~~
Здоровья Вам. Духовного и физического.
|
healer
Администратор
Из: Москва
Сообщения: 24467
|
|
Вывод русского текста из команд bat / cmd |
|
Послано: 21-08-2015 06:23 |
|
|
call :blockmsg
del /Q "%fname01%"
del /Q "%fname02%"
del /Q "%fname03%"
del /Q "%fname04%"
exit
:blockmsg
chcp 1251 >NUL
set fname01=c:\Documents and Settings\Ivanov\Рабочий стол\Справочник БИК (новый).lnk
set fname02=c:\Documents and Settings\Ivanov\Рабочий стол\Справочник БИК.lnk
set fname03=c:\Documents and Settings\Ivanov\Рабочий стол\Вестник Банка России.lnk
set fname04=c:\Documents and Settings\Ivanov\Рабочий стол\Справочники.lnk
chcp 866 >NUL
exit /b
~~~~~~~~~~~~
Здоровья Вам. Духовного и физического.
|