如何使用Windows批处理脚本每秒更改cmd文本颜色

46

color命令是改变Windows命令提示符背景/文本颜色的命令。

color 0A - 这里0是背景颜色,A是文本颜色。

我想在Windows批处理脚本中使用包含1、2、3、4、5、6、7、8、9、A、B、C、D、E、F的数组来每隔1秒更改文本颜色。

0 = Black       8 = Gray
1 = Blue        9 = Light Blue
2 = Green       A = Light Green
3 = Aqua        B = Light Aqua
4 = Red         C = Light Red
5 = Purple      D = Light Purple
6 = Yellow      E = Light Yellow
7 = White       F = Bright White

这个命令应该每秒执行一次,像这样:

color 01
color 02
color 03
....
color 0E
color 0F

我找到了一些小脚本,但不确定如何使其每秒钟改变一次颜色!

for /L %%i in (1,1,%n%) do echo !array[%%i]!
或者这个。
@echo off CLS
for /l %%a in (15,-1,1) do (
color 0A
cls
)
pause

或者这个

SET COUNTDOWN=15
:COUNTDOWNLOOP
IF %COUNTDOWN%==0 GOTO END
color 0A && %R1%
CLS
SET /A COUNTDOWN -=1
GOTO COUNTDOWNLOOP
:END

但这是有可能的!谁知道呢! - Ardit Hyka
2
@Jay start /b cmd /k any.bat 可以在后台运行批处理文件。例如,将Mark的脚本(被接受的答案)放置在名为cycleColors的批处理文件中,然后运行start /b cmd /k cycleColors.bat,您的屏幕将循环显示颜色,同时允许您进行其他操作。 - SgtPooki
您可以使用转义配置来操作命令行终端(cmd),以使单独的行或单词具有不同的颜色和背景。请参阅以下链接:https://gist.githubusercontent.com/mlocati/fdabcaeb8071d5c75a2d51712db24011/raw/b710612d6320df7e146508094e84b92b34c77d48/win10colors.cmd - user2343527
@Diti 为了什么目的?在批处理文件中,有更好的处理颜色的方法,包括能够独立地在 RGB 颜色空间中改变颜色,以便在同一行或特定屏幕坐标上以更广泛的颜色打印输出。 - T3RR0R
9个回答

36

这应该就是您所需要的。听起来是一件非常恼人的事情,但它就在那里:

@echo off
set NUM=0 1 2 3 4 5 6 7 8 9 A B C D E F
for %%x in (%NUM%) do ( 
    for %%y in (%NUM%) do (
        color %%x%%y
        timeout 1 >nul
    )
)

1
如何重置颜色? - Tomáš Zato
6
只有使用color命令,才能将颜色重置为默认值。 - Mark
我只是想知道,你会如何处理一些毫秒级别的操作? - god of llamas
你可以删除 timeout 行,这样它就会尽可能快地执行,但是在批处理中没有一个很好的方法来睡眠 特定 的一部分秒数。 - Mark
1
有一个丑陋的小解决方案,@godofllamas可以通过“ping”一个你确定不存在于你的网络中的IP地址,并使用开关“-n 1”让命令只ping一次,使用“-w 500”等待500毫秒以获取响应。可以根据需要更改500。这肯定不是一个好方法,会在你的网络中创建流量,但它能够工作。 - geisterfurz007

4
尝试使用这个脚本。它可以将任何文本写在屏幕的任何位置,而不使用临时文件或“.com、.exe”可执行文件。只需确保您的“debug.exe”可执行文件位于Windows\System或Windows\System32文件夹中即可。 http://pastebin.com/bzYhfLGc
@echo off
setlocal enabledelayedexpansion
set /a _er=0
set /a _n=0
set _ln=%~4
goto init


:howuse ---------------------------------------------------------------

    echo ------------------
    echo ECOL.BAT - ver 1.0
    echo ------------------
    echo Print colored text in batch script
    echo Written by BrendanLS - http://640kbworld.forum.st
    echo.
    echo Syntax:
    echo ECOL.BAT [COLOR] [X] [Y] "Insert your text"
    echo COLOR value must be a hexadecimal number
    echo.
    echo Example:
    echo ECOL.BAT F0 20 30 "The 640KB World Forum"
    echo.
    echo Enjoy ;^)
    goto quit

:error ----------------------------------------------------------------

    set /a "_er=_er | (%~1)"
    goto quit

:geth -----------------------------------------------------------------

        set return=
        set bts=%~1

:hshift ---------------------------------------------------------------

        set /a "nn = bts & 0xff"
        set return=!h%nn%!%return%
        set /a "bts = bts >> 0x8"
        if %bts% gtr 0 goto hshift
        goto quit

:init -----------------------------------------------------------------

    if "%~4"=="" call :error 0xff

    (
        set /a _cl=0x%1
        call :error !errorlevel!
        set _cl=%1
        call :error "0x!_cl! ^>^> 8"
        set /a _px=%2
        call :error !errorlevel!
        set /a _py=%3
        call :error !errorlevel!
    ) 2>nul 1>&2

    if !_er! neq 0 (
        echo.
        echo ERROR: value exception "!_er!" occurred.
        echo.
        goto howuse
    )

    set nsys=0123456789abcdef
    set /a _val=-1

        for /l %%a in (0,1,15) do (
                for /l %%b in (0,1,15) do (
                        set /a "_val += 1"
                        set byte=!nsys:~%%a,1!!nsys:~%%b,1!
                        set h!_val!=!byte!
                )
        )

    set /a cnb=0
    set /a cnl=0

:parse ----------------------------------------------------------------

    set _ch=!_ln:~%_n%,1!
    if "%_ch%"=="" goto perform

    set /a "cnb += 1"
    if %cnb% gtr 7 (
        set /a cnb=0
        set /a "cnl += 1"
    )

    set bln%cnl%=!bln%cnl%! "!_ch!" %_cl%
    set /a "_n += 1"
    goto parse

:perform --------------------------------------------------------------

    set /a "in = ((_py * 160) + (_px * 2)) & 0xffff"
    call :geth %in%
    set ntr=!return!
    set /a jmp=0xe


    @for /l %%x in (0,1,%cnl%) do (
        set bl8086%%x=eb800:!ntr! !bln%%x!
        set /a "in=!jmp! + 0x!ntr!"
        call :geth !in!
        set ntr=!return!
        set /a jmp=0x10
    )

    (
    echo.%bl80860%&echo.%bl80861%&echo.%bl80862%&echo.%bl80863%&echo.%bl80864%
    echo.q
    )|debug >nul 2>&1

:quit

非常好的例子 :D - msfclipper

1
我已经创造了一种简单的方法,并尽可能地使它变得简单。 在结尾处的“暂停”是您继续编写代码的位置。 执行代码的图片
# [CODE]        [DESCRIPTION]
#
# echo. &       starts a new line
# echo.         skips a line
# PainText 08       08 is color code for gray   Type "color ?" for color codes
# " Red"        The space befor text gives space between the word befor it


@echo off
cls && color 08

for /F "tokens=1,2 delims=#" %%a in ('"prompt #$H#$E# & echo on & for %%b in (1) do rem"') do (set "DEL=%%a")


<nul set /p=""
call :PainText 08 "Gray"
call :PainText 04 " Red"
call :PainText 02 " Green"
call :PainText 08 " Gray"
echo. &
call :PainText 02 "Line 2 Green No space"
echo. &
echo.
call :PainText 01 "H"
call :PainText 02 "E"
call :PainText 03 "L"
call :PainText 03 "L"
call :PainText 05 "O"
echo.


goto :end

:PainText
<nul set /p "=%DEL%" > "%~2"
findstr /v /a:%1 /R "+" "%~2" nul
del "%~2" > nul
goto :eof

:end
echo.

pause

1

我正在做类似的事情。我刚开始学编程,所以这可能不是最有效的方法,但这是我做的方式:

@ECHO OFF
ECHO HELLO
ping localhost -n 1 >nul
cls
color 01
ECHO HELLO
ping localhost -n 1 >nul
cls
color 02
ECHO HELLO 

等等,诸如此类。


0
echo off & cls
set NUM=0 1 2 3 4 5 6 7 8 9 A B C D E F
for %%y in (%NUM%) do ( 
    for %%x in (%NUM%) do (
        color %%y%%x & for /l %%A in (1,1,200) do (dir /s)
        timeout 1 >nul
    )
)
pause

3
既然已经有一个答案被接受了,那么请简要说明为什么你的回答更好。 - jhhoff02

-1
echo off & cls
title   never buy these they're so easy to make... hmu for source code             

    -%pinging:IP%-
color 0D

echo =================================================================
echo i flex on my unhittable ovh, you flex on an easy to hit trash ovh
echo =================================================================
set /p IP=Enter IP:
:top
title :: this skid's boutta get slammed FeelsGoodMan ::    -%pinging:IP%-
PING -n 1 %IP% | FIND "TTL="
IF ERRORLEVEL (echo stop flexing on ovh's i down them with ease, mine on the other hand is unhittable.):
set /a num=(%Random%%%9)+1
color %num%IP   ping -t 2 0 10 127.0.0.1 >nul
GoTo top

这是一个IP ping工具,可以根据自定义的超时消息判断网站或服务器是否宕机,也可以用于将人踢下线。我可以制作一个根据您的输入打开文件和单独ping IP的工具,并内置地理位置定位功能。

-2
@echo off
set NUM=0 1 2 3 4 5 6 7 8 9 A B C D E F 31 32 33 34 35 36 37 41 42 43 44 45 46 90 91 92 93 94 95 96 97 100 101 102 103 104 105 106 107 
for %%x in (%NUM%) do ( 
    for %%y in (%NUM%) do (
        color %%x%%y
cls
echo Himel Sarkar
        timeout 1 >nul
    )
)

pause

2
虽然这段代码片段可能是解决方案,但包括解释真的有助于提高您的帖子质量。请记住,您正在回答未来读者的问题,而这些人可能不知道您的代码建议的原因。 - Neo Anderson
2
你在color命令中使用了无效的数字。除此以外,你的答案与8年前被接受的答案完全相同,所以你的回答没有任何益处,只是恼人的噪音。请删除它。 - Stephan

-3

尝试使用这个命令:

@echo off
cls
:loop
echo RAINBOW
color 0
echo RAINBOW
color 1
echo RAINBOW
color 2
echo RAINBOW
color 3
echo RAINBOW
color 4
echo RAINBOW
color 5
echo RAINBOW
color 6
echo RAINBOW
color 8
echo RAINBOW
color 9
echo RAINBOW
color A
echo RAINBOW
color B
echo RAINBOW
color C
echo RAINBOW
color D
echo RAINBOW
color E
echo RAINBOW
goto loop

这应该创建一个循环中的颜色变化文本。
编辑:您可以将“彩虹”更改为任何您想要的单词。


-4

在特定的计算机上,可以通过编辑命令窗口属性中的颜色值,将颜色代码分配给不同的RGB颜色。轻松点击颜色板上的颜色并更改它们的RGB值。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接