中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » (已结)谁知道控制echo显示字串的颜色
作者:
标题: (已结)谁知道控制echo显示字串的颜色 上一主题 | 下一主题
tq08rsu
初级用户




积分 177
发帖 22
注册 2004-4-26
状态 离线
『楼 主』:  (已结)谁知道控制echo显示字串的颜色

如上谁知道命令或者外部命令

---------- Edited by willsort ----------
现共三种方案:
1.Writext(见于Wengier启动盘),方案在4楼
2.ANSI.SYS+Prompt:适用于命令行,方案在2楼和4楼
3.ANSI.SYS+ECHO:适用于批处理,方案在2楼和6楼
---------- Edited by willsort ----------


[ Last edited by willsort on 2005-8-2 at 21:23 ]

2005-7-27 21:55
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
willsort
元老会员

Batchinger


积分 4432
发帖 1512
注册 2002-10-18
状态 离线
『第 2 楼』:  如何在多种环境下准备使用ANSI.SYS

Re tq08rsu:

  这需要启动ANSI.SYS支持,在CONFIG.SYS(DOS/Win9x)或者CONFIG.NT(WinNTs)中添加,之后就可以使用ANSI转义字符来改变屏幕的显示属性了。

  ANSI.SYS的加载见下,至于转义字符的运用,可以参考DOS帮助文档中的ANSI.SYS部分:

在 MS-DOS 和 Win98 中准备使用 ANSI.SYS
--------------------------------------

  在 MS-DOS 和 Win98的命令行环境中,我们使用 ANSI.SYS 需要通过一个启动配置
文件来加载它,那就是 config.sys ,它是一个纯文本文件,通常位于系统所在盘的根
目录,可以用“记事本”或者上节提到的“edit”来编辑它。我们可以在这个文件的最
后添加一行如下的文字:

  device=c:\Windows\Command\ANSI.SYS /x

  其中的 C:\Windows\Command 可能需要替换成 ANSI.SYS 文件实际所在的目录。比
如你是 MS-DOS 的用户,那么 ANSI.SYS 很可能在 C:\DOS 下。

  编辑完成后,重新启动计算机就可以在 MS-DOS 或者 Win 98 的命令行环境下使用
ANSI.SYS 所提供的各种功能特性了。

在 Win2K 和 WinXP 中准备使用 ANSI.SYS
-------------------------------------

  在 Win2K和 WinXP的命令行环境中,已不再使用 config.sys ,但是可以在系统路
径下的 System32 目录中找到一个替代品,那就是 config.nt,它用于配置 MS-DOS 模
拟环境(command.com)。它也是纯文本文件,所以也可以用记事本打开并编辑它。我
们需要给它加上与 MS-DOS 和 Win9x 系统相类似的文字:

  device=%SystemRoot%\system32\ANSI.SYS /x

  其中的 %SystemRoot% 是个全局的环境变量,我们可以直接使用它引用系统路径,
而不需要人为地修改它。

  与 MS-DOS 和 Win9x 的命令行环境不同的是,我们还需要修改 config.nt 文件中
的一个细节,那就是将“REM DOSONLY”一行中的“REM”去除。这样做的原因是,ANSI
是一个基于 MS-DOS 的终止并驻留(TSR)内存的程序,它需要一个纯粹的运行 MS-DOS
程序的环境,否则就会无法正常的使用。而 DOSONLY正是创建这个环境的必要开关,所
以我们去掉它前面的注释命令,以使它在 config.nt 中生效。

  所有的设置修改完成后,就可以立即在运行中输入 “command”(不是 CMD),此
时有 ANSI 支持的命令行环境就被启动了。

如何在我需要时才使用 ANSI.SYS
-----------------------------

  以上对 config.sys 和 config.nt 的修改将会使以后运行所有的 MS-DOS 程序都
可以享用 ANSI.SYS 所带来的特性,但同时也会始终占用命令行环境下约 4K 的内存空
间。我们可能并不想这样,因为我们并不经常需要 ANSI.SYS 的支持,当我们不需要它
时,总是不希望它浪费我们宝贵的内存空间。

  要解决这个问题,我们可以在系统启动以后再加载它。在 MS-DOS 环境中,当需要
使用 ANSI.SYS 的时候,一般使用 device.exe 或者其他有相似功能的第三方程序在命
令行加载 ANSI.SYS ,不需要的时候也同样可以卸载它。

  在 Win9x的命令行环境中,我们多了一种选择,那就是为需要使用 ANSI.SYS 的程
序编辑自己专属的启动配置文件:在程序的右键“属性”菜单中,选择“程序->高级->
MS-DOS方式->指定新的 MS-DOS 配置”,然后在 config.sys 的对话框中添加 device
语句即可。但是这个方法的缺点是启动和退出这个程序时,都会重新启动系统以进入新
的命令行环境。

  而在WinXP 的命令行中,没有了这个缺点,我们可以为需要使用 ANSI.SYS 的程序
创建一个指向 MS-DOS 程序的快捷方式(.PIF文件):在程序所在文件夹的空白处点击
右键,选择“新建->快捷方式”,在文本框中填入 command,然后一路回车,在出现了
“MS-DOS方式”之后,在右键“属性”菜单中,修改程序名为要使用ANSI的批处理程序
名,再将“高级”中的 autoexec 和 config 文件设置为我们重新定制的文件,这两个
文件我们可以复制原有的 config.nt和 autoexec.nt,再做上述的修改,它们可以在任
何位置,也可以取任何文件名,但必须是完整路径。确定所做的修改后即可用此快捷方
式启用 ANSI 支持的特定批处理程序了。


[ Last edited by willsort on 2005-8-27 at 14:37 ]



※ Batchinger 致 Bat Fans:请访问 [讨论]批处理编程的异类 ,欢迎交流与共享批处理编程心得!
2005-7-29 12:34
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
treey
初级用户





积分 62
发帖 15
注册 2005-7-23
状态 离线
『第 3 楼』:  

能否说得具体一点,怎么使用ANSI转义字符来改变屏幕的显示属性?谢谢!

2005-7-29 18:05
查看资料  发送邮件  发短消息 网志  OICQ (84771455)  编辑帖子  回复  引用回复
JonePeng
金牌会员

D◎$ Fαп


积分 4562
发帖 1883
注册 2004-1-19
来自 广东广州
状态 离线
『第 4 楼』:  

方法一:

用Wengier的MSDOS 7.1超级启动盘里面的 Writext.exe 来输出彩色字符。

Writext 的用法:

writext row[+/-] column[+/-] {[-f## [-b##]] text}

row -- 指定字符输出的行
column -- 指定字符输出的列 (这两个参数如果加上+或-号,即表示从当前的位置输出。
-f## 和 -b## -- 指定字符、背景颜色代码,详细的代码请运行writext /?

例如,WRITEXT 0+ 1 -f14 "Welcome to China DOS Union!" -f7
表示从当前位置输出黄色字的"Welcome to China DOS Union!" ,末尾的“ -f7
”表示将颜色恢复为原来的白色。


方法二:

在Config.sys中加载了Ansi.sys之后,在Autoexec.bat里用 Prompt 命令来设置字符和背景的颜色。Prompt 的用法是:

prompt $e[colorm

其中,“$e”就是转义字符,color 是颜色代码(颜色代码如下),“color”后面紧挨着“m”,“e”和“m”都必须是小写。

  Quote:
color 颜色代码:
0 -- 默认颜色(黑屏白字)
1 -- 高亮度字体颜色
5 -- 字符闪烁
8 -- 取消字符属性

30 -- 黑色前景
31 -- 红色前景
32 -- 绿色前景
33 -- 黄色前景
34 -- 蓝色前景
35 -- 紫色前景
36 -- 青色前景
37 -- 白色前景

40 -- 黑色背景
41 -- 红色背景
42 -- 绿色背景
43 -- 黄色背景
44 -- 蓝色背景
45 -- 紫色背景
46 -- 青色背景
47 -- 白色背景

例如:将字符颜色设为黄色: Prompt $e[33m

如果需要设置多种颜色属性,Prompt 后面就连写几个颜色代码,如: 将字符设为高亮度白色、背景为蓝色:Prompt $e[37m$e[1m$e[44m

注意:Prompt 命令后面还必须加上“$p$g”才完整,因为“$p$g”是显示将DOS提示符显示为当前盘符和路径,没有它的话将看不到。因此在Autoexec.bat里Prompt的完整写法应该像这样:Prompt $e[37m$e[1m$e[44m$p$g

但是我刚刚写一个批处理来验证时发现,在批处理中用Prompt命令不能控制颜色,原因不得而知……

[ Last edited by JonePeng on 2005-7-29 at 23:51 ]



----====≡≡≡≡ 我的至爱,永远是MSDOS!≡≡≡≡====----
  
2005-7-29 21:27
查看资料  发送邮件  发短消息 网志  OICQ (373343541)  编辑帖子  回复  引用回复
treey
初级用户





积分 62
发帖 15
注册 2005-7-23
状态 离线
『第 5 楼』:  

受教了.谢谢JonePeng大侠!

2005-7-30 10:09
查看资料  发送邮件  发短消息 网志  OICQ (84771455)  编辑帖子  回复  引用回复
willsort
元老会员

Batchinger


积分 4432
发帖 1512
注册 2002-10-18
状态 离线
『第 6 楼』:  

Re JonePeng:

  那是因为你使用的是prompt,在批处理中的echo off状态下,对prompt状态是不可感知的。改用 echo 来控制就好了,当然 $e 要改为实际的转义字符(Esc),一般在 EDIT 下用 Ctrl+P,Esc来输入。

  另外,颜色代码是可以联缀使用的,比如:
@echo off
echo ←[33;44;1mSik..←[0m
[ Last edited by willsort on 2005-7-30 at 12:21 ]



※ Batchinger 致 Bat Fans:请访问 [讨论]批处理编程的异类 ,欢迎交流与共享批处理编程心得!
2005-7-30 12:16
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
7451316
初级用户





积分 64
发帖 14
注册 2006-2-25
状态 离线
『第 7 楼』:  

感谢大家的帮助,但是dos下光标的颜色,如何设置呢???

2006-3-26 18:09
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
electronixtar
铂金会员





积分 7493
发帖 2672
注册 2005-9-2
状态 离线
『第 8 楼』:  

好像用color 21可以设置整体颜色

2006-5-11 13:41
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lsj1112
初级用户





积分 84
发帖 24
注册 2006-8-27
状态 离线
『第 9 楼』:  

我按照楼上几位的说明,试验了,还是不行啊,无法显示!

附:

E:\>ansi

ANSI 1.3j (C) 1988 Ziff Communications Co.
PC Magazine ■ Michael J. Mefford

Status: ON FAST KON PON XON
Buffer size: 200
Bytes free:  200


E:\>2.bat
←[1m←[37m←[44m$p$g

E:\>

[ Last edited by lsj1112 on 2006-9-3 at 00:27 ]

2006-9-3 00:20
查看资料  发短消息 网志   编辑帖子  回复  引用回复
electronixtar
铂金会员





积分 7493
发帖 2672
注册 2005-9-2
状态 离线
『第 10 楼』:  

cmd是不行的,要command




C:\>BLOG http://initiative.yo2.cn/
C:\>hh.exe ntcmds.chm::/ntcmds.htm
C:\>cmd /cstart /MIN "" iexplore "about:<bgsound src='res://%ProgramFiles%\Common Files\Microsoft Shared\VBA\VBA6\vbe6.dll/10/5432'>"
2006-9-3 00:38
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lsj1112
初级用户





积分 84
发帖 24
注册 2006-8-27
状态 离线
『第 11 楼』:  

试过了,command也不行!

2006-9-3 14:49
查看资料  发短消息 网志   编辑帖子  回复  引用回复
luowei14
初级用户




积分 193
发帖 98
注册 2007-1-17
状态 离线
『第 12 楼』:  

...cmd 现实彩色字母.....不理解



这家伙很聪明 什么都没留下
2007-8-11 22:29
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
sl543001
中级用户




积分 499
发帖 225
注册 2008-12-30
状态 离线
『第 13 楼』:  

利用debug写入com文件的方法貌似更简实用些!
@echo off&setlocal enabledelayedexpansion
goto :sktit
a
dw E8A 80 CD89 C581 81 F980 7F05 BA09 1A4 9B4 21CD 5EEB 82BE E800 65 5AE3
dw 73E8 3C00 7F18 8853 E8C6 57 4CE3 65E8 3C00 7F4F 8845 B0C2 F602 50E2 A0B0
dw E6F6 15F E8C7 3D 32E3 C387 393C 27E 904 FB80 7E39 8003 9C3 F24 E380 C00F
dw 4E0 D808 B850 B800 750 295A 89F5 ACE9 88AA AAD0 F9E2 B0 4CB4 21CD ADBA
dw B401 CD09 EB21 ACF3 203C 475 F9E2 9EB C388 3CAC 7520 E202 C3F9 C387 302C
dw EB80 B430 F60A E4 C3D8 CEB2 FDCA BBB2 BBB9 B824 CAF1 B2BD B6BB 24D4

r cx
b6
n tit.com
w
a 100
mov ax,0
int 16
mov ah,4c
int 21

r cx
9
n abc.com
w
q
:sktit
chcp 437 >nul
graftabl 936 >nul
debug <%~dpnx0
tit 0100F2在第2行最开始(00为第一01为第二)显示白底绿色的字
tit 0202f0在第3行第3个字符的位置,显示白底黑色的字
tit 05200cS
tit 05210eY
tit 052209B
tit 05230aN
tit 05250b彩色文字示例文件
pause

2009-10-1 22:26
查看资料  发送邮件  发短消息 网志  OICQ (354324773)  编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: