|
本帖最后由 201287zr 于 2025-3-13 10:01 编辑
前段时间看到论坛有人分享利用ANSI控制cmd显示字符颜色,这里我也分享一个利用FINDSTR.EXE来控制CMD显示字符颜色的批处理,可以支持xp—win11。这是以前学批处理时在网上搜到的一个方法,个人只是对其进行了简单优化,让它可以显示部分特殊字符。
1.使用方法
将下面的批处理脚本添加到你自己批处理文件的末尾,并主程序的合适位置通过CALL调用,就可以显示文字颜色。
CALL :colortxt 颜色代码 “字符串” [/n]
2.功能说明
colortxt可处理3个参数:颜色值 "字符串" /n
颜色值 指定控制台输出的颜色属性,可查阅 color /? 命令
字符串 要显示(输出)的文字,最好使用""将文字包围起来
/n 显示时进行换行,如果不加此参数默认不会自动换行
注意:要显示的字符串不要超过72个英文字符,否则cmd行尾会显示多余的\..\':.字符。
脚本支持显示^//|&\<*>等特殊字符,要显示(输出)一个%,请用%%%%代替。
- @ECHO OFF
- REM CMD中显示字符串颜色 By 初一的阳光
- REM ===========================在主程序中调用===========================
- SET var=Hello World
- REM 用法为CALL :colortxt 颜色代码 “要显示的文字” [/n]
- CALL :colortxt E4 "%var% (!^/|&\<*>%%%%:!)" /n
- CALL :colortxt 4E "不自动换行"
- ECHO 这是正常文字颜色
- REM 调用colortxt后执行清理工作
- CALL :cleanupTmpFile
- pause&exit
- REM ===========================字符串颜色处理===========================
- :colortxt
- SET "str_=%~2"
- SET "str_=%str_:!=^!%"
- :colorPrint Color Str [/n]
- @ECHO OFF&SETLOCAL ENABLEDELAYEDEXPANSION
- CALL :colorPrintVar %1 str_ %3
- ENDLOCAL
- EXIT /B
- :colorPrintVar Color StrVar [/n]
- SET "str_=!%~2!"
- IF NOT DEFINED DEL CALL :initColorPrint
- PUSHD ':
- REM 不要删除下面FOR语句中的空行
- FOR %%n IN (^"^
- ^") DO (
- SET "str_=!str_:\=%%~n\%%~n!"
- SET "str_=!str_:/=%%~n/%%~n!"
- REM SET "str_=!str_::=%%~n:%%~n!"
- )
- FOR /F delims^=^ eol^= %%s IN ("!str_!") DO (
- IF [%%s]==[\] (
- FINDSTR /A:%1 "." "\'" NUL & SET/P "=%DEL%%DEL%%DEL%" <nul
- ) ELSE IF [%%s]==[/] (
- FINDSTR /A:%1 "." "/.\'" NUL & SET/P "=%DEL%%DEL%%DEL%%DEL%%DEL%"<nul
- ) ELSE (
- >colorPrint.txt ECHO %%s\..\'
- FINDSTR /A:%1 /F:colorPrint.txt "." & SET/P "=%DEL%%DEL%%DEL%%DEL%%DEL%%DEL%%DEL%"<NUL
- )
- )
- IF /I [%~3]==[/n] ECHO.
- IF /I [%~3]==[\n] ECHO.
- IF /I [%~3]==[-n] ECHO.
- POPD
- EXIT /B
- :initColorPrint
- SET PROMPTDEL="prompt $H&for %%i in (1) do rem THISISIMORTANT"
- FOR /F %%A IN ('%PROMPTDEL%') DO SET "DEL=%%A %%A"
- IF NOT EXIST ':\ (SUBST ': "%temp%" >NUL)
- >"%temp%\'" SET /P "=."<NUL
- EXIT /B
- :cleanupTmpFile
- 2>NUL DEL /F /Q "%temp%\'"
- 2>NUL DEL "%temp%\colorPrint.txt"
- SUBST ': /D >NUL
- EXIT /B %ERRORLEVEL%
复制代码
FINDSTR显示颜色核心原理:
REM FINDSTR /A:颜色属性 "搜索字符串" 文件列表(只有在搜索多个文件时才会显示颜色)
REM FINDSTR只会显示“相对路径及其文件名”的颜色,而查找到的字符串不会显示颜色
REM FINDSTR /F表示从指定文件中读取文件列表,列表中/表示控制台输入,\会被解析为路径
以上代码其实还包含了很多批处理技巧,比如相对路径运用、预处理、FOR循环、CALL调用等,对于学习提高批处理技巧有很大的帮助!
希望大家喜欢,共同探讨交流,分享宝贵经验!
|
|