Board logo

标题: 单行显示多种颜色字符的批处理 [打印本页]

作者: Batcher    时间: 2008-9-16 15:17     标题: 单行显示多种颜色字符的批处理

【注】本文中的代码依赖于XP等老系统里面的debug命令,Win10等新系统可以用其它更简单的方法:
http://bbs.bathome.net/thread-60616-1-1.html#pid247814

代码功能:   实现纯批处理在单行显示不同颜色的彩色字符功能,并且不影响相临行文字的颜色值。

实现意义:   不调用非微软第三方工具实现、不生成任何临时文件。
实现价值:   没任何实用价值,纯为技术而挑战看上去不可能的技术。
实现版本:   稍微修改后均可以在CMD与MS-DOS版本上实现同样功能。
关于注释:   下面代码只是显示一堆字符而已,只为思考想法的可实现性。
        如果用于显示特殊文字内容,下个版本可以随意完成,此演示无效。



测试版本: Windows CMD Shell 非全屏模式/全屏模式
      目前不支持纯DOS,因为命令行过长所至,除非使用 Debug E命令直接写内存减少命令长度
  1. @echo off
  2. ::  显示单行彩色字符,其色彩值不影响本行以外的任何行
  3. ::  
  4. ::  Var Redtek 2006 - bbs.cn-dos.net
  5. set "var=A$_MOV,AH,09$_MOV,AL,2A$_MOV,BH,00$_MOV,BL,0E$_MOV,CX,0020$_INT,10$_"
  6. set "var=%var%MOV,BL,0A$_MOV,CX,000A$_INT,10$_INT,20$_$_g$_q$_"
  7. echo exit|%ComSpec% /k prompt %var%|debug>nul
复制代码
[运行方法: 先进入CMD以后,再输入这个批处理的名字运行。]
[      如果在桌面直接鼠标双击运行,则一闪而过不会显示彩色内容]



上面代码没有任何实用价值,这也是偶然间想“挑战”一下那些调用第三方工具才能实现的功能,就想思考那些看上去不可能的事,
以上代码纯属思考着玩的一个想法,贴上和大家一起分享好玩的东东~:)
原帖地址:http://www.cn-dos.net/forum/viewthread.php?tid=25797
作者: too_lazy    时间: 2008-12-9 18:07

试过了!!!
不行~~~
作者: Batcher    时间: 2008-12-9 20:35     标题: 回复 2楼 的帖子

请列出测试用例、测试环境、测试结果。
但凭“不行”二字,恐怕观音姐姐来了也帮不上你。
作者: kingerpk    时间: 2009-2-7 21:39

请教楼主一个关于变色的问题:
我在论坛中看了相关的帖:
http://bathome.net/viewthread.php?tid=629&highlight=%B1%E4%C9%AB
自己也写了一个变色的代码:
  1. @echo off
  2. :1123
  3. setlocal enabledelayedexpansion
  4. set a=123456789abcfe
  5. set p=!random!%%14+1
  6. color 3!a:~%p%,1!
  7. echo @@@@@@@@@@@
  8. goto 1123
复制代码

但运行后显示:
设置默认的控制台前景和背景颜色。
COLOR [attr]
  attr        指定控制台输出的颜色属性
颜色属性由两个十六进制数字指定 -- 第一个为背景,第二个则为
前景。每个数字可以为以下任何值之一:

    0 = 黑色       8 = 灰色
    1 = 蓝色       9 = 淡蓝色
    2 = 绿色       A = 淡绿色
    3 = 湖蓝色     B = 淡浅绿色
    4 = 红色       C = 淡红色
    5 = 紫色       D = 淡紫色
    6 = 黄色       E = 淡黄色
    7 = 白色       F = 亮白色

如果没有给定任何参数,该命令会将颜色还原到 CMD.EXE 启动时
的颜色。这个值来自当前控制台窗口、/T 开关或
DefaultColor 注册表值。

如果用相同的前景和背景颜色来执行 COLOR 命令,COLOR 命令
请按任意键继续. . .

问题出在哪?

[ 本帖最后由 kingerpk 于 2009-2-7 23:07 编辑 ]
作者: Batcher    时间: 2009-2-7 22:49     标题: 回复 4楼 的帖子

第五行,涉及到数值计算时,应使用 set /a
作者: NeverOK    时间: 2009-4-25 22:13

这是个好东东。
测试通过。
问题是它和DOS下使用ANSI.sys显示彩色字体有什么区别呢?
我试过ANSI在WINPE2。0环境不能运行以外,其他WIN2000以上环境都可以

在WINPE2。0下把COMMAND.COM文件拷贝到WINDOWS\system32下也不行,闷。。。
作者: wwjpl    时间: 2009-5-17 07:17

我试过了,是绿颜色和黄色*号
作者: Batcher    时间: 2009-5-17 08:28     标题: 回复 7楼 的帖子

可以改成自己喜欢的颜色
作者: 慕夜蓝化    时间: 2014-12-15 09:47

debug 这个命令,确定在win764位中不存在,对吗?
作者: DAIC    时间: 2014-12-15 10:15

回复 9# 慕夜蓝化


    是的
作者: TAT    时间: 2022-2-15 20:01

运行错误,图片传不上来。。
作者: Batcher    时间: 2022-2-15 23:07

回复 11# TAT


试试这个:
http://bbs.bathome.net/thread-60616-1-1.html#pid247814
作者: TAT    时间: 2022-2-16 19:33

回复 12# Batcher


    成了成了,厉害哇,学习学习,非常感谢!! :lol
作者: TAT    时间: 2022-2-18 19:59

回复 12# Batcher


    关于12楼中链接的代码,运行逻辑懂了,大部分也看懂并理解了,but仍然有一些不太明白,还望不吝赐教!
·1.
set '=!%让叹号的变量最后才解开%
这句是把单引号设置为感叹号???十分迷茫这句。。
·2.
for /F "tokens=1 delims=#" %%a in ('"prompt #$E# & echo on & for %%b in (1) do rem"') do set "ESC=%%a"
这句我知道是把ESC那个特殊字符表示出来了,是个灵魂操作,不过in里面那串实在是看不懂。。好迷茫啊。。
·3.
贴出的查阅文章实在如获至宝,关键的东西都有了,完美!!
作者: TAT    时间: 2022-2-18 20:02

回复 12# Batcher


   
想再追问一个其他的,如果知道的话还望不吝赐教。。
就是用Python写一个小应用,有界面(目前用PyQt5做的),有一些简单功能,但是打包体积会很离谱,
也在网上多方查阅过相关资料,但结果都不太理想。。如果您也恰好有这方面经验的话还望不吝赐教!!




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2