需要sed.exe
[ Last edited by vkill on 2007-3-14 at 02:26 AM ]
@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 ]
