Как создать batch-файл и разные цвета в консоли из командного файла
Сначала первый вопрос из заголовка, который мне на минувшей и этой неделе неоднократно задавали.
Убеждаемся, что у нас в масдае включен показ типов файлов, что совершенно необходимо (по умолчанию выключен).
Для проверки нажимаем комбинацию клавиш Win + E
, открывается окно "Мой компьютер". Нажимаем левый Alt
, в верхнем меню переходим Вид - Параметры и выбираем вкладку Вид, внизу списка убираем галочки как на рисунке:

Настройки вида папок
Жмём "Применить", "Сброс вида папок", "ОК".
В папке, где есть права на выполнение приложений (на домашнем компьютере с правами администратора - обычно любая папка, на публичном компьютере с ограниченной учётной записью это может быть специально выделенная папка или диск) создаём текстовый документ, нажав правой кнопкой на свободном месте:

Создание текстового документа
Вместо "Новый текстовый документ.txt
" вводим имя командного файла, например, "my.bat
":

my.bat
Соглашаемся с предупреждением о смене типа файла.
Если у Вас ещё не установлен Notepad++ - сделайте это, выбрав при установке русский язык и оставив все остальные настройки по умолчанию. Редактор, в том числе, добавит в меню, вызываемое нажатием правой кнопки мыши на файлах, команду "Edit with Notepad++
", которой можно пользоваться для редактирования. Подсветка синтаксиса, подсказки, автозапоминание для всех форматов. По умолчанию в современных версиях Notepad++ принята кодировка Юникода UTF-8, если хотите, чтобы она была и в консоли (например, batch-скрипт использует кириллицу), установите кодировку для консоли в самом файле:

Команда chcp 65001 - это и есть установка UTF-8 для консоли
Потом пишите программу. Если она не требует аргументов комадной строки, запускать batch-файл можно как любое приложение двойным кликом мыши по файлу в папке, если эти аргументы нужны, поможет, например, командная строка. Нажимаем в Windows комбинацию клавиш Win + R
, вводим команду cmd
, жмём Enter
, переходим в нужную папку, где находится файл, например:

Скрипт обработки любого допустимого количества аргументов командной строки и его выполнение в консоли Windows
Здесь мы запустили из выбранной папки командный файл my
с четырьмя аргументами командной строки - abc
, def
, gh
и 999
.
На скрине также показан способ обработки bat-файлом любого количества параметров - в нашем случае он просто выводит очередной параметр (аргумент командной строки, отделённый хотя бы одним пробелом) с помощью echo и затем сдвигает строку параметров командой shift, чтобы снова работать со значением %1
.
Сначала приведём простую учебную "оболочку" для стандартной команды color, которую можно сохранить под именем colors.bat
и запустить из командной строки или файл-менеджера, например, так:
colors 1 E
Мы увидим, что будет, если в консоли отдать команду
color 1E
Вот листинг файла colors.bat
:
@echo off chcp 65001 >nul cls title Цвета консоли if '%1'=='' goto error1 if '%2'=='' goto error1 for %%a in (0 1 2 3 4 5 6 7 8 9 a b c d e f A B C D E F) do if %%a==%1 goto ok1 goto error2 :ok1 for %%a in (0 1 2 3 4 5 6 7 8 9 a b c d e f A B C D E F) do if %%a==%2 goto ok2 goto error3 :ok2 if '%1'=='%2' goto error4 :start color %1%2 echo Вот что вышло командой color %1%2 goto end :error1 echo Запускайте программу с двумя аргументами от 0 до F, например echo mycolors 2 d goto end :error2 echo Неверный аргумент %1 goto end :error3 echo Неверный аргумент %2 goto end :error4 echo Аргументы 1 и 2 должны быть разными, иначе color не работает :end echo Нажмите Enter для выхода pause >nul title %comspec% color 07
С современным расширенным синтаксисом батников и escape-последовательностями, поддерживаемыми консолью Windows 10, можно сделать гораздо больше фокусов, но и код будет выглядеть куда шаманистей.
Не будем писать ещё одну "обёртку" для консольной команды color
, а просто покажем основные цвета консоли, этот файл типа .bat
выполнялся в актуальной сборке Windows 10 из-под файл-менеджера:
@echo off setlocal cls for /F "delims=#" %%E in ('"prompt #$E# & for %%E in (1) do rem"') do set "esc=%%E" echo. for %%1 in (0,1) do ( for /l %%2 in (30,1,37) do ( for /l %%3 in (40,1,47) do ( 0>nul set /p=%esc%[%%1;%%2;%%3m test %esc%[m ) echo. ) )

Скрин вывода этого файла (фрагмент экрана)
Сработало и в однобайтовой кодировке batch-файла (например, Windows-1251 - кириллица Windows), и в кодировке Юникода UTF-8, при необходимости есть команда chcp.
Главное - ухитриться залимонить в bat-файл вывод символа с кодом 27, чтобы делать escape-последовательности. См. хитрый for
в четвёртой строке.
02.11.2022, 16:51 [532 просмотра]