Как отобразить разные цвета в командной строке Windows ВНУТРИ А ДЛЯ ЦИКЛА С ВЫБОРОМ cmd - PullRequest
1 голос
/ 28 апреля 2019

В то время как здесь широко объясняется «Как отображать разные цвета в командной строке Windows»

Как отображать разные цвета в командной строке Windows

он не работает внутри цикла for, как уже заметил chersun:

@JensA.Koch Это потрясающе.Но у меня есть проблема с этим, работающим в цикле for.Только первое эхо будет правильно окрашено, после чего все остальные будут просто печатать все escape-символы вместо того, чтобы что-либо менять.Пакетный файл предназначен для архивирования каждой папки в отдельный архив, пытаясь вывести имя папки жирным шрифтом, после чего следует стандартный вывод архиватора с фильтрацией findstr.- chersun 22 апреля '18 в 21: 36

Я открываю новый вопрос, поскольку у меня недостаточно репутации, чтобы писать сообщения в предыдущем.

Единственное решение, которое я нашел, было включить последля команды (внутри блока do) фиктивный CMD / C Echo / в качестве обходного пути.

Есть ли лучшие способы?

TIA

Редактировать: Спасибо за комментарии, вот идет пакетный файл

из блока, цвета идут хорошо.проблема идет с ВЫБОРОМ, если удаленная проблема исчезает.Решение состоит в том, чтобы включить «пустое» CMD

Ответ Y на выполнение, чтобы увидеть неудачный вывод

@ECHO OFF
for /F %%a in ('echo prompt $E ^| cmd') do set "_esc=%%a"
set _redon=%_esc%[91m
set _greenon=%_esc%[92m
set _coloff=%_esc%[0m
SET _free=1000
SET _used=2000
ECHO %_redon%!_used!%_coloff% / %_greenon%!_free!%_coloff%
SETLOCAL EnableDelayedExpansion
FOR /L %%A IN (1,1,5) DO (
    CHOICE /C YN /T 5 /D N /N /M "Press Y to process %%A"
    IF "!ERRORLEVEL!"=="1" (
        SET _free=1000
        SET _used=2000
REM needed CMD to return proper behaviour
REM     CMD /C echo/
        ECHO %_redon%!_used!%_coloff% / %_greenon%!_free!%_coloff%
    )
)
PAUSE
EXIT

Спасибо @Stephan за украшение кода.

1 Ответ

0 голосов
/ 28 апреля 2019

Я не могу воспроизвести:

РЕДАКТИРОВАТЬ: изменено для создания переносного символа ESC, благодаря @ Aacini

@echo off
cls
for /F %%a in ('echo prompt $E ^| cmd') do set "ESC=%%a"

echo ^<ESC^>[0m %ESC%[0mReset%ESC%[0m

for %%A in (
    7,30,31,32,33,34,35,36,37,
    40,41,42,43,44,45,46,47,
    90,91,92,93,94,95,96,97,
    100,101,102,103,104,105,106,107
) Do echo ^<ESC^>[%%Am %ESC%[%%AmTest%ESC%[0m

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...