着色批处理文件的特定部分

时间:2017-03-26 19:57:56

标签: batch-file

我正在尝试着色我的批处理文件的特定部分,并且想知道它是否是A甚至是可能的B,如果我可以只为特定文本而不是整个cmd窗口着色。

这是我的测试代码,我希望将Y和N颜色为绿色和红色:

@echo off
:start
echo hello, are you a Robot?
:choice
echo How do you answer?
set /P c=[Y/N]
if /I "%c%" EQU "Y" goto :start
if /I "%c%" EQU "N" goto :shutdown
goto :choice
:shutdown
exit

3 个答案:

答案 0 :(得分:0)

您可以这样做:

@echo off & setlocal enabledelayedexpansion
Call :init
:start
cls
Call :Color 0E " Hello, are you a Robot " 0 & echo|set /p="?"
echo(
:choice
Call :Color 0A " How do you answer " 0 & echo|set /p="?"
echo(
set /P c=[Y/N]
if /I "%c%" EQU "Y" goto :start
if /I "%c%" EQU "N" goto :shutdown
goto :choice
:shutdown
exit

::*************************************************************************************
:init
prompt $g
for /F "delims=." %%a in ('"prompt $H. & for %%b in (1) do rem"') do set "BS=%%a"
exit /b
::*************************************************************************************
:color
set nL=%3
if not defined nL echo requires third argument & pause > nul & goto :eof
if %3 == 0 (
    <nul set /p ".=%bs%">%2 & findstr /v /a:%1 /r "^$" %2 nul & del %2 2>&1 & goto :eof
) else if %3 == 1 (
    echo %bs%>%2 & findstr /v /a:%1 /r "^$" %2 nul & del %2 2>&1 & goto :eof
)
exit /b
::*************************************************************************************

答案 1 :(得分:0)

@ECHO OFF
SETLOCAL
SET "esc="
SET "normal=%esc%[1;33m"
SET "red=%esc%[1;31m"
SET "green=%esc%[1;32m"
:start
echo hello, are you a Robot?
:choice
echo How do you answer?
set /P c=[%green%Y%normal%/%red%N%normal%]
if /I "%c%" EQU "Y" goto start
if /I "%c%" EQU "N" goto shutdown
goto choice
:shutdown

我的正常颜色设置为黑色为黄色。转义字符很好地逃脱,但它可能会在SO上呈现。我使用editplus,它允许输入控制字符。其他编辑可能会以其他方式允许这样做。

除此之外,只需根据需要切换颜色,并在显示特价后恢复正常颜色。

我添加了setlocal,以便在批量关闭时还原环境更改(这是针对一般情况;您的设置似乎设置为exit

我还删除了goto语句中的冒号。此处需要冒号的唯一条件是具有特定含义的goto :eof的特定情况。

答案 2 :(得分:-2)

您可以在批处理文件中使用ANSI escape codes