标题: [特效代码] 【已解决】批处理如何实现cmd窗口随机配色? [打印本页]
作者: wangjile 时间: 2013-7-1 13:05 标题: 【已解决】批处理如何实现cmd窗口随机配色?
我想让我的批处理在启动时随机选择颜色代码,就是每次打开批处理背景和前景颜色都是随机的,但是有要求背景颜色和前景颜色不能相同,否则会变回默认的黑框框
问了一圈,也没人回答,自己连搜带蒙的写了以下代码:- @echo off
- :ks
- setlocal EnableDelayedExpansion
- set str=0 1 2 3 4 5 6 7 8 9 A B C D E F
- set /a asss=%random%%%16
- set /a addd=%random%%%16
- for /f "tokens=%asss% delims= " %%i in ("%str%") do set dy=%%i
- for /f "tokens=%addd% delims= " %%Y in ("%str%") do set de=%%Y
- color %dy%%de%
- pause
- goto ks
复制代码
倒是能够随机配色了,但是会报错,请高手指点,如果能够有更简练的代码的话,也请不吝赐教……
下面是报错的截图:
作者: xxpinqz 时间: 2013-7-1 13:43
tokens=0报错。循环32次后也会出错
试试这样- @echo off&setlocal enabledelayedexpansion
- set "str=0123456789abcdef"
- :ks
- set /a asss=!random!%%16,addd=!random!%%16
- color !str:~%asss%,1!!str:~%addd%,1!
- pause
- goto ks
复制代码
作者: wangjile 时间: 2013-7-1 14:12
tokens=0报错。循环32次后也会出错
试试这样
xxpinqz 发表于 2013-7-1 13:43
嗯,谢谢回答,这个给力,也不会报错……大概能看懂,非常感谢,不过大虾能不能解释下!str:~%addd%,1!这句的意思,或者给个教程的地址也行,再次谢谢大虾的回答
作者: wangjile 时间: 2013-7-1 14:18
查了下教程,有这么一句
~在%var:~n,m%中表示使用扩展环境变量指定位置的字符串。
m 和 n 为整数参数。数字 m 为正数表示取变量 var 中从左侧数第 m 个字符(单字节字符)以后的内容;m 为负数则表示取变量 var 从右侧数第 -m 个字符以及其右侧的所有的字符,这就是第一条命令所产生的新字符串。如果数字 n 为正数,表示在上述新字符串中,从其左侧取 n 个字符的内容;若 n 为负数,则从其左侧取字符直到还剩下 -n 个字符为止的内容。
如果您坚持认为这种抽象的表达方式是根本无法解释清楚这该死的 m 和无耻的 n 究竟是怎么回事的话,不如实验一下下面的例子。为了方便查看效果,我们假定变量 var 中的内容为 1234567890 (set var=1234567890),然后依次输入以下命令并查看相应的结果。
输入的命令 结果 效果
echo %var% 1234567890 显示所有
echo %var:~4% 567890 从第4个字符以后开始显示
echo %var:~4,3% 567 从第4个字符以后开始显示,并只显示前3个
echo %var:~-4% 7890 从倒数第4个字符开始显示
echo %var:~-4,3% 789 从倒数第4个字符开始显示,并只显示前3个
echo %var:~4,-2% 5678 从第4个字符以后开始显示,显示到还剩2个为止
echo %var:~0,3% 123 从头开始显示,并只显示前3个字符
echo %var:~0,-3% 1234567 从头开始显示,显示到还剩3个字符为止
此外,set 也可以对数值型的变量进行常见的运算操作。
set /a num=48
set /a result=%num%+12
echo %result%
上面的命令表示先给数值 48 赋给变量 num ,然后再把变量 num 的数值与数值 12 相加后的结果赋给变量 result 。第3行可以显示变量 result 的值,结果很明显,是 60 。
现在终于看懂了,松了一口气啊
作者: wangjile 时间: 2013-7-1 14:26
本帖最后由 wangjile 于 2013-7-3 14:10 编辑
!str:~%addd%,1! 意思就是从字符串str中取自左侧第1个字符开始以后的内容(顺序为自左向右),而%addd%在这里的意思就是在上述取到的内容中取第%addd%个字符的内容,也就是说m指定范围,n指定具体数值…………不知道我这么理解对不对?
这个新找到的,更便于理解:
set 目标字符串=%源字符串:~起始值,截取长度%
注意,起始值从0开始!
截取长度是可选的,如果省略逗号和截取长度,将会从起始值一直截取到字符串的结尾
作者: cutebe 时间: 2013-7-1 14:45
本帖最后由 cutebe 于 2013-7-1 14:52 编辑
- @ECHO OFF
- SETLOCAL EnableDelayedExpansion
- :BEGIN
- SET COLOR=0123456789ABCDEF
- SET/aBC=!RANDOM!%%16
- SET BACK_COLOR=!COLOR:~%BC%,1!
- SET COLOR=!COLOR:%BACK_COLOR%=!
- SET/aFC=!RANDOM!%%15
- SET FRONT_COLOR=!COLOR:~%FC%,1!
- COLOR %BACK_COLOR%%FRONT_COLOR%
- PAUSE
- GOTO :BEGIN
复制代码
SET STR=ABCDEF
首先给字符串“ABCDEF”编号,从 0 开始
A B C D E F
0 1 2 3 4 5
%STR:~M,N% //这里M,N代表数字
意思就是从 编号M 开始,取出数量 N 个字符。
如:%STR:~2,3%
从 编号2 开始,向右取出数量 3 个字符
编号2 对应字符“C”,“C”也是第一个字符,往后再取 2 个字符,即“DE”
最后为:“CDE”,即 %STR:~2,3%=CDE
作者: Batcher 时间: 2013-7-1 15:49
回复 3# wangjile
批处理命令set截取字符详解
http://www.bathome.net/thread-996-1-1.html
批处理命令set变量字符截取点点通
http://www.bathome.net/thread-40-1-1.html
批处理命令set截取字符练习工具
http://www.bathome.net/thread-1149-1-1.html
作者: wangjile 时间: 2013-7-3 11:40
嗯,谢谢Batcher大大的教程
作者: lateol 时间: 2013-7-4 04:23
我也受教了,顶起。
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |