中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-06-20 14:51
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 论坛色彩渐变代码生成器.bat 查看 6,637 回复 52
楼 主 论坛色彩渐变代码生成器.bat 发表于 2007-03-11 01:20 ·  中国 甘肃 张掖 电信
金牌会员
★★★★
积分 4,103
发帖 1,744
注册 2006-01-20 13:00
20年会员
UID 49241
性别 男
来自 甘肃.临泽
状态 离线
需要sed.exe



@echo off
title 论坛色彩渐变代码生成器 V-1.2 by-vkill

::默认config:::::::::::::::::::::::::::::::::::::::::
::说明%txt%为临时文件,你可以随便自定义
set "起始色=FF0000"
set "结束色=0000FF"
set "显示文字=test color"
set "txt=ubb.txt"
:::::::::::::::::::::::::::::::::::::::::::::::::::::

::依赖文件完整性检查
sed.exe >nul 2>nul
if "%ERRORLEVEL%"=="9009" (
echo 缺少程序依赖文件sed.exe
echo 请到http://www.yx127.com/tools.html页面下载再运行此程序
pause>nul
goto :eof
)

:::::::::::::::::::::::::::::::::::::::::::::::::::::
:start
cls
endlocal
setlocal ENABLEDELAYEDEXPANSION
echo.
echo 直接回车表示默认,输入格式请遵照默认的例子
echo.
set "str=起始色;结束色;显示文字"
for %%? in (%str%) do (set/p=<nul)
echo.
echo.
for %%? in (%str%) do (set/p=%%?=<nul&set/p "%%?= ")
if "%起始色%*"=="%结束色%*" (echo 貌似没有变色哦&pause>nul&goto start)
echo.
echo 开始转换,稍等...
:::::::::::::::::::::::::::::::::::::::::::

set "显示文字= !显示文字!"

::计算%显示文字%的位数
for /f %%? in ('echo "%显示文字%"^|sed "s/^\x22//;s/\x22$//;s//&\n/g;s//&\n/g"^|sed -n "$="') do (set/a ww=%%?-1)

::转换%起始色%和%结束色%到10进制
call :h2d %起始色%
set/p ad=<%txt%
call :h2d %结束色%
set/p zd=<%txt%

::计算隔多少放一个颜色
if %ad% lss %zd% (set "max=%zd%"&set "min=%ad%"&set "顺=是") else (set "max=%ad%"&set "min=%zd%"&set "顺=否")
set/a "n1=%max%-%min%"
set/a "n2=%n1%/%ww%"


::计算出每个字的颜色并转换到16进制
for /l %%? in (1,1,%ww%) do (
set/a #%%?=%n2%*%%?+%min%
call :d2h !#%%?!
set/p #%%?=<%txt%
)

::写*
echo "%显示文字%"|sed "s/^\x22//;s/\x22$//;s//⒈&⒉/g;s//⒈&⒉/g"|sed "s/⒈//g;s/⒉//g"|more>%txt%

::替换每个字的颜色
set/p var=<%txt%
if "%顺%*"=="是*" (call :换色 1 1 %ww%)
if "%顺%*"=="否*" (call :换色 %ww% -1 1)

echo ok,生成的代码在%txt%文件中,任意键后自动打开%txt%文件,请手动复制
pause>nul
start %txt%
goto start


::::::::::::::::::::::::::all call::::::::::::::::::::::::::::

::------------------------------------------------------------
:h2d
::16进制转10进制
endlocal
setlocal ENABLEDELAYEDEXPANSION
set hs=%1
set /a sum=0x!hs!
>%txt% echo %sum%
goto :eof

::------------------------------------------------------------
:d2h
::10进制转16进制
endlocal
setlocal enabledelayedexpansion
set "hs=%1"
:loop_d2h
set/a z=%hs%/16
set/a y=%hs%%%16
if %z% lss 16 (
call :zh_d2h %y%
call :zh_d2h %z%
goto loop_end_d2h ) else (call :zh_d2h %y%)
set hs=%z%
goto loop_d2h
:loop_end_d2h
>%txt% echo %sum%
goto :eof
:zh_d2h
if %1 GEQ 10 (
if "%1*"=="10*" set var=A
if "%1*"=="11*" set var=B
if "%1*"=="12*" set var=C
if "%1*"=="13*" set var=D
if "%1*"=="14*" set var=E
if "%1*"=="15*" set var=F
) else (set var=%1)
set sum=!var!%sum%
goto :eof

::------------------------------------------------------------
:补位
endlocal
setlocal enabledelayedexpansion
set "hs=%1"
:loop_补位
if "!hs:~5,1!*"=="*" (
set "hs=0!hs!"
goto loop_补位
)
>%txt% echo !hs!
goto :eof

::-----------------------------------------------------------
:换色
endlocal
setlocal enabledelayedexpansion
for /l %%a in (%1,%2,%3) do (
call :补位 !#%%a!
set/p #color=<%txt%
for /f "tokens=*" %%? in ('echo "!var!"^|sed "s/^\x22//;s/\x22$//;s/↑/!#color!/"') do (set "var=%%?")
)
echo "!var!"|sed "s/^*//g;s/*$//g"|more>%txt%
goto :eof


[ Last edited by vkill on 2007-3-14 at 02:26 AM ]
本帖最近评分记录 (共 5 条) 点击查看详情
评分人分数时间
9527 +11 2007-03-11 01:42
lxmxn +20 2007-03-11 06:19
HUNRYBECKY +5 2007-03-14 21:23
redtek +20 2007-03-14 22:18
qasa +4 2007-04-04 11:44
2 发表于 2007-03-11 01:20 ·  中国 甘肃 张掖 电信
金牌会员
★★★★
积分 4,103
发帖 1,744
注册 2006-01-20 13:00
20年会员
UID 49241
性别 男
来自 甘肃.临泽
状态 离线
效果:

bbs.cn-dos.net ~

特殊字符测试
!@#$%^&*()_+-={}|]\:";'<>?,./



@#$%^&*()_+-={}|]\:;'<>?,./

[ Last edited by vkill on 2007-3-16 at 01:47 AM ]
3 发表于 2007-03-11 01:30 ·  中国 安徽 芜湖 电信
高级用户
★★
积分 537
发帖 219
注册 2006-10-31 21:08
19年会员
UID 69036
性别 男
来自 芜湖
状态 离线
,?
江湖远
碧空长
路茫茫

一个人漫无目的的奔跑,风,刺骨的冷....
4 发表于 2007-03-11 01:31 ·  中国 安徽 芜湖 电信
高级用户
★★
积分 537
发帖 219
注册 2006-10-31 21:08
19年会员
UID 69036
性别 男
来自 芜湖
状态 离线
江湖远
碧空长
路茫茫

一个人漫无目的的奔跑,风,刺骨的冷....
5 发表于 2007-03-11 01:37 ·  中国 陕西 西安 电信
铂金会员
★★★★
积分 5,212
发帖 2,478
注册 2007-02-08 23:39
19年会员
UID 79003
性别 男
状态 离线
bbs.cn-dos.net 爱你~

!@#$%^&*()_+-={}|]\:";'<>?,./

你的颜色的过渡效果太差了吧。
6 发表于 2007-03-11 01:38 ·  中国 河北 廊坊 三河市 移动
金牌会员
★★★★
积分 2,725
发帖 1,160
注册 2006-09-23 12:00
19年会员
UID 63486
来自 河北廊坊
状态 离线
vk

[ Last edited by ccwan on 2007-3-11 at 01:40 AM ]
三人行,必有吾师焉。 学然后知不足,教然后知困,然后能自强也。
7 发表于 2007-03-11 01:48 ·  中国 甘肃 张掖 电信
金牌会员
★★★★
积分 4,103
发帖 1,744
注册 2006-01-20 13:00
20年会员
UID 49241
性别 男
来自 甘肃.临泽
状态 离线
Originally posted by slore at 2007-3-11 01:37:
bbs.cn-d

望指教一二
8 发表于 2007-03-11 02:17 ·  中国 陕西 西安 电信
铂金会员
★★★★
积分 5,212
发帖 2,478
注册 2007-02-08 23:39
19年会员
UID 79003
性别 男
状态 离线
FF0000
然后中间的00从0开始增加到FF

FFFF00
然后第前2个FF开始减少到0
00FF00
…………
00FF00~00FFFF

00ffff~0000FF(绿色的减少)
0000FF~FF00FF(红色的增加上来)
最后蓝色的FF逐渐减少,就成FF0000
那么就从红到红了,完成了变化。
自己可以在桌面属性的那个自定义颜色里把鼠标从左上角缓慢拖到右上角……自己看看R G B的变化情况。
这个是彩虹色的过渡……
9 发表于 2007-03-11 02:22 ·  中国 甘肃 张掖 电信
金牌会员
★★★★
积分 4,103
发帖 1,744
注册 2006-01-20 13:00
20年会员
UID 49241
性别 男
来自 甘肃.临泽
状态 离线
再测试
123456789.


bbs.cn-dos.net ~


·#%*+



test color





还是不明白slore兄所说的

[ Last edited by vkill on 2007-3-14 at 02:12 AM ]
10 发表于 2007-03-11 02:35 ·  中国 陕西 西安 电信
铂金会员
★★★★
积分 5,212
发帖 2,478
注册 2007-02-08 23:39
19年会员
UID 79003
性别 男
状态 离线
为了gif文件的大小,图质量不好,不过足以说明效果。

你仔细看R G B数值的变化情况
附件
1.gif
11 发表于 2007-03-11 02:37 ·  中国 甘肃 张掖 电信
金牌会员
★★★★
积分 4,103
发帖 1,744
注册 2006-01-20 13:00
20年会员
UID 49241
性别 男
来自 甘肃.临泽
状态 离线
我是每隔一段10进制的数来给一个字符上色的,看来这个方法不可行
12 发表于 2007-03-11 02:41 ·  中国 广西 玉林 博白县 电信
金牌会员
★★★★
积分 3,687
发帖 1,467
注册 2005-08-08 12:00
20年会员
UID 44210
状态 离线
主要还是颜色过渡太猛
13 发表于 2007-03-11 02:43 ·  中国 陕西 西安 电信
铂金会员
★★★★
积分 5,212
发帖 2,478
注册 2007-02-08 23:39
19年会员
UID 79003
性别 男
状态 离线
Originally posted by vkill at 2007-3-10 13:37:
我是每隔一段10进制的数来给一个字符上色的,看来这个方法不可行


我以前也是那样=。=
但是彩虹的过渡不是按10进制递增的。。。
14 发表于 2007-03-11 02:46 ·  中国 甘肃 张掖 电信
金牌会员
★★★★
积分 4,103
发帖 1,744
注册 2006-01-20 13:00
20年会员
UID 49241
性别 男
来自 甘肃.临泽
状态 离线
re slore
那是怎么递增的那?好象有些10进制转换到16进制,那个16进制就没有颜色是不?
15 发表于 2007-03-11 02:48 ·  中国 陕西 西安 电信
铂金会员
★★★★
积分 5,212
发帖 2,478
注册 2007-02-08 23:39
19年会员
UID 79003
性别 男
状态 离线
16进制也是颜色啊……

不过要分段递增,你看图在看我#8的。。。应该可以理解了吧。
论坛跳转: