Javascript-форум (https://javascript.ru/forum/)
-   Ваши сайты и скрипты (https://javascript.ru/forum/project/)
-   -   Цветной текст в консоли Windows (https://javascript.ru/forum/project/49844-cvetnojj-tekst-v-konsoli-windows.html)

devote 31.08.2014 00:04

Цветной текст в консоли Windows
 
Вложений: 2
Привет All!

В один из рабочих дней, сидя на работе нужно было написать один скриптик в .cmd (командном) файле. Собственно скрипт то я написал, но захотелось добавить изюминки в выводе текста. И вот оно:
# Печатает текст с необходимым цветом без перевода каретки на новую строку
# Синтакс:
#   call:write цветHEX "выводимый текст"
:write (
  rem # Возможно первым аргументом передали текст
  set arg1=%1
  set arg2=%2
  if "%arg1:~0,1%%arg1:~-1%"=="""" (
    rem # Если цвет не указали просто выводим с дефолтным цветом
    0<nul set /p"=%arg1:~1,-1%"
    exit /b
  )
  rem # Удаляем начальные и конечные кавычки в тексте
  set arg2=%arg2:~1,-1%~

  rem # Заменяем продублированные кавычки в одни
  set arg2=%arg2:""="%

  rem "# Заменяем двойные кавычки другими
  set arg2=%arg2:"=`%

  echo off
  0<nul set /p .=.>"%arg2%"
  findstr /v /a:%arg1% /R "^$" "%arg2%" nul
  set /p .=   <nul
  del "%arg2%" > nul 2>&1
  exit /b
)
# Печатает текст с необходимым цветом с переводом каретки на новую строку
# Синтакс:
#   call:writeln цветHEX "выводимый текст"
:writeln (
  call:write %1 %2
  echo.
  exit /b
)
Этот скрипт выводит текст в консоль винды с нужным нам цветом, использование очень простое, вызов происходит так:
call:writeln 02 "Привет мир!"
Данная команда выведет текст темно-зеленого цвета и переведет каретку на новую строку. Либо:
call:write 02 "Привет мир!"
Тоже выведет темно-зеленого но каретку оставит в конце строки.

Цвета в консоле стандартные от 00 до 0F то-есть всего 16 цветов.

PS. На форуме конечно некоторые символы не печатаются, то есть скрипт будет работать не правильно из-за того что строка 25 в коде деформирована... Там между равенством и скобкой < должно быть не только три пробела а символы удаления, то есть в символьных кодах HEX: 080808202020080808

Смотрите вложение!

PPSSS. Файлы .txt переименуйте в .cmd/.bat

bes 31.08.2014 15:39

devote, чёт не фурыкает, пока не понял в чём причина,
можешь приложить готовый батник, который у тебя работает, с нужным chcp и pause, чтобы просто запустить и посмотреть, что вот оно

devote 31.08.2014 18:54

bes,
приложил тест

PS. хотя у меня там в тесте кодовая страница 866 стоит, но и 1251 работает норм. Это уж кому что.

bes 31.08.2014 19:24

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


Часовой пояс GMT +3, время: 14:20.