无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 929|回复: 8
打印 上一主题 下一主题

[分享] 【批处理】通过FINDSTR控制CMD命令行显示文字颜色

[复制链接]
跳转到指定楼层
1#
发表于 2025-3-12 23:39:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 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行尾会显示多余的\..\':.字符。
脚本支持显示^//|&\<*>等特殊字符,要显示(输出)一个%,请用%%%%代替。

  1. @ECHO OFF
  2. REM CMD中显示字符串颜色 By 初一的阳光

  3. REM ===========================在主程序中调用===========================
  4. SET var=Hello World
  5. REM 用法为CALL :colortxt 颜色代码 “要显示的文字” [/n]
  6. CALL :colortxt E4 "%var% (!^/|&\<*>%%%%:!)" /n
  7. CALL :colortxt 4E "不自动换行"
  8. ECHO 这是正常文字颜色

  9. REM 调用colortxt后执行清理工作
  10. CALL :cleanupTmpFile

  11. pause&exit


  12. REM ===========================字符串颜色处理===========================
  13. :colortxt
  14. SET "str_=%~2"
  15. SET "str_=%str_:!=^!%"

  16. :colorPrint Color  Str  [/n]
  17. @ECHO OFF&SETLOCAL ENABLEDELAYEDEXPANSION
  18. CALL :colorPrintVar %1 str_ %3
  19. ENDLOCAL
  20. EXIT /B

  21. :colorPrintVar Color  StrVar  [/n]
  22. SET "str_=!%~2!"
  23. IF NOT DEFINED DEL CALL :initColorPrint
  24. PUSHD ':
  25. REM 不要删除下面FOR语句中的空行
  26. FOR %%n IN (^"^

  27. ^") DO (
  28.   SET "str_=!str_:\=%%~n\%%~n!"
  29.   SET "str_=!str_:/=%%~n/%%~n!"
  30.   REM SET "str_=!str_::=%%~n:%%~n!"
  31. )

  32. FOR /F delims^=^ eol^= %%s IN ("!str_!") DO (
  33.   IF [%%s]==[\] (
  34.     FINDSTR /A:%1 "." "\'" NUL & SET/P "=%DEL%%DEL%%DEL%" <nul
  35.   ) ELSE IF [%%s]==[/] (
  36.     FINDSTR /A:%1 "." "/.\'" NUL & SET/P "=%DEL%%DEL%%DEL%%DEL%%DEL%"<nul
  37.   ) ELSE (
  38.     >colorPrint.txt ECHO %%s\..\'
  39.     FINDSTR /A:%1 /F:colorPrint.txt "." & SET/P "=%DEL%%DEL%%DEL%%DEL%%DEL%%DEL%%DEL%"<NUL
  40.   )
  41. )
  42. IF /I [%~3]==[/n] ECHO.
  43. IF /I [%~3]==[\n] ECHO.
  44. IF /I [%~3]==[-n] ECHO.
  45. POPD
  46. EXIT /B

  47. :initColorPrint
  48. SET PROMPTDEL="prompt $H&for %%i in (1) do rem THISISIMORTANT"
  49. FOR /F %%A IN ('%PROMPTDEL%') DO SET "DEL=%%A %%A"
  50. IF NOT EXIST ':\ (SUBST ': "%temp%" >NUL)
  51. >"%temp%\'" SET /P "=."<NUL
  52. EXIT /B

  53. :cleanupTmpFile
  54. 2>NUL DEL /F /Q "%temp%\'"
  55. 2>NUL DEL "%temp%\colorPrint.txt"
  56. SUBST ': /D >NUL
  57. EXIT /B %ERRORLEVEL%
复制代码



FINDSTR显示颜色核心原理:
REM FINDSTR /A:颜色属性 "搜索字符串" 文件列表(只有在搜索多个文件时才会显示颜色)
REM FINDSTR只会显示“相对路径及其文件名”的颜色,而查找到的字符串不会显示颜色
REM FINDSTR /F表示从指定文件中读取文件列表,列表中/表示控制台输入,\会被解析为路径

以上代码其实还包含了很多批处理技巧,比如相对路径运用、预处理、FOR循环、CALL调用等,对于学习提高批处理技巧有很大的帮助!
希望大家喜欢,共同探讨交流,分享宝贵经验!




2#
发表于 2025-3-13 07:23:30 | 只看该作者
感谢分享
回复

使用道具 举报

3#
发表于 2025-3-13 08:19:51 | 只看该作者
谢谢楼主分享
回复

使用道具 举报

4#
发表于 2025-3-13 08:36:49 | 只看该作者
感谢分享
回复

使用道具 举报

5#
发表于 2025-3-13 08:39:47 | 只看该作者
很好
回复

使用道具 举报

6#
发表于 2025-3-13 08:40:13 | 只看该作者
感谢分享
回复

使用道具 举报

7#
发表于 2025-3-13 09:06:59 | 只看该作者
感谢分享。。。
回复

使用道具 举报

8#
发表于 2025-3-13 10:30:18 | 只看该作者
这里面最牛逼的是哪个神人想出来的 Subst ': "%temp%"
回复

使用道具 举报

9#
发表于 2025-3-13 12:07:23 | 只看该作者
这些在bash里已经用了很多年。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2025-4-2 03:50

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表