Последние записи
- Смена регистра строки текста на BAT (CMD)
- Вывод разноцветного текста на BAT (CMD)
- Узнать дату окончания сертификата
- Как создать полноценный сайт на Open Server
- Получить температуру процессора на bat-файлах
- Динамические массивы в Lazarus / Delphi — индексация элементов
- Многозадачность на бат-файлах
- Дата и время изменения файла
- Правильно объединить ячейки построчно в Microsoft Office Excel
- Пример проигрывания музыки по нотам на бат-файлах (через powershell)
Интенсив по Python: Работа с API и фреймворками 24-26 ИЮНЯ 2022. Знаете Python, но хотите расширить свои навыки?
Slurm подготовили для вас особенный продукт! Оставить заявку по ссылке - https://slurm.club/3MeqNEk
Online-курс Java с оплатой после трудоустройства. Каждый выпускник получает предложение о работе
И зарплату на 30% выше ожидаемой, подробнее на сайте академии, ссылка - ttps://clck.ru/fCrQw
25th
Дек
Вывод разноцветного текста на BAT (CMD)
Posted by obzor under Windows
Утилита FINDSTR при помощи ключа /A позволяет задать цвета текста и фона для выводимых имён файлов, в которых обнаружено соответсвие строке поиска (после имени файла теми же цветами выводится двоеточие, а затем, уже общими цветами окна консоли, строка, содержащая соответствие). Причём, если строка, содержащая соответствие, в файле последняя и не завершается переводом строки, то перевод строки после неё будет отсутствовать и в выводе FINDSTR.
Это используется в двух следующих процедурах, предназначенных для вывода текста заданного цвета:
:write
:: Вывести цветную надпись без перевода строки
:: %1 - цвет
:: %2 - текст надписи
:: %3 - флаг, любое значение, если нужно двоеточие в конце строки
:writeLn
:: Вывести цветную надпись с переводом строки
:: %1 - цвет
:: %2 - текст надписи
:: %3 - флаг, любое значение, если нужно двоеточие в конце строки
Пример использования:
call :writeLn 2C " Hello, World "
— выведет «Hello, World» красным цветом на зеленом фоне.
Особенности:
1. Цвет задается аналогично команде COLOR, т.е. цвет фона и текста двумя шестнадцатеричными цифрами.
2. Учитывая то, что цветным выводится имя файла, далеко не любой текст можно вывести этим методом. Текст должен быть допустимым с точки зрения составления имени файла.
3. В каталоге %TEMP% создается и затем удаляется временный подкаталог (если при создании подкаталога происходит ошибка, попытка повторяется для другого имени…).
4. В конце строки можно вывести двоеточие, хотя оно не может присутствовать в имени файла. Для этого надо установить любое значение в качестве третьего аргумента процедуры.
5. Пробелы в конце строки съедаются, в начале строки сохраняются.
6. В строках длинной 78 и 79 символов, т.е. если строка подходит к концу экрана, при выводе в конце могут добавиться двоеточие и точка (используемая здесь в качестве строки поиска FINDSTR). (wisgest: Точнее, в строках длиной n*w-1 и n*w-2, где n — целое число, w — ширина буфера экрана в символах, которая может отличаться от 80.)
Пример с двоеточием:
call :write 0F "Random" 1
call :writeLn 0E " %random%"
В таком примере в конце строки будет выведено двоеточие зеленого цвета и точка обычного цвета (wisgest: если ширина буфера экрана составляет 80 символов):
call :writeLn 0A "123456789012345678901234567890123456789012345678901234567890123456789012345678"
Сами процедуры с использующим их примером:
@ echo off
setlocal enabledelayedexpansion
call :write 0F "Random" 1
call :writeLn 0E " %random%"
echo:
set hex=0123456789ABCDEF
for /l %%j in (1, 1, 6) do (
for /l %%i in (15, -1, 1) do (
call :write !hex:~%%i,1!!hex:~%%j,1! "[---]"
)
echo:
)
echo:
call :writeLn 2C " Hello, World "
echo:
call :writeLn 0A "123456789012345678901234567890123456789012345678901234567890123456789012345678"
echo:
pause
color 0B
pause
endlocal
exit /b 0
:write
:: Вывести цветную надпись без перевода строки
:: %1 - цвет
:: %2 - текст надписи
:: %3 - флаг, любое значение, если нужно двоеточие в конце строки
setlocal
:write1
set "tempFolder=%TEMP%\%~n0.%time:~-2%.%random%"
md "%tempFolder%" 2>nul || goto write1
pushd %tempFolder%
set /p .=.<nul>"%~2"
findstr /a:%~1 /c:"." /s "%~2"
if "%~3"=="" (set /p .= <nul) else set /p .= <nul
popd
rd /s /q "%tempFolder%" 2>nul
endlocal & exit /b
:writeLn
:: Вывести цветную надпись с переводом строки
:: %1 - цвет
:: %2 - текст надписи
:: %3 - флаг, любое значение, если нужно двоеточие в конце строки
call :write %1 "%~2" %3
echo:
exit /b
(т.к. имеются управляющие символы Backspace, используемые для удаления завершающего двоеточия с точкой, можете воспользоваться присоединённым файлом).
Более актуальный метод вывода разноцветного текста (и управление прочими параметрами вывода) описан тут — CMD/BAT: Управляющие последовательности ANSI/ECMA-48. Однако метод, описанный выше, может быть использован в качестве альтернативы.
Случайные статьи
Купить рекламу на сайте за 1000 руб
пишите сюда - alarforum@yandex.ru
Да и по любым другим вопросам пишите на почту

пеллетные котлы

Пеллетный котел Emtas
Наши форумы по программированию:
- Форум Web программирование (веб)
- Delphi форумы
- Форумы C (Си)
- Форум .NET Frameworks (точка нет фреймворки)
- Форум Java (джава)
- Форум низкоуровневое программирование
- Форум VBA (вба)
- Форум OpenGL
- Форум DirectX
- Форум CAD проектирование
- Форум по операционным системам
- Форум Software (Софт)
- Форум Hardware (Компьютерное железо)


