[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[特效代码] 【已解决】批处理如何实现cmd窗口随机配色?

我想让我的批处理在启动时随机选择颜色代码,就是每次打开批处理背景和前景颜色都是随机的,但是有要求背景颜色和前景颜色不能相同,否则会变回默认的黑框框
问了一圈,也没人回答,自己连搜带蒙的写了以下代码:
  1. @echo off
  2. :ks
  3. setlocal EnableDelayedExpansion
  4. set str=0 1 2 3 4 5 6 7 8 9 A B C D E F
  5. set /a asss=%random%%%16
  6. set /a addd=%random%%%16
  7. for /f "tokens=%asss% delims= " %%i in ("%str%") do set dy=%%i
  8. for /f "tokens=%addd% delims= " %%Y in ("%str%") do set de=%%Y
  9. color %dy%%de%
  10. pause
  11. goto ks
复制代码
倒是能够随机配色了,但是会报错,请高手指点,如果能够有更简练的代码的话,也请不吝赐教……

下面是报错的截图:
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

tokens=0报错。循环32次后也会出错
试试这样
  1. @echo off&setlocal enabledelayedexpansion
  2. set "str=0123456789abcdef"
  3. :ks
  4. set /a asss=!random!%%16,addd=!random!%%16
  5. color !str:~%asss%,1!!str:~%addd%,1!
  6. pause
  7. goto ks
复制代码
1

评分人数

初学BAT,非专业。代码不适当之处还望前辈们多多指点。在此表示感谢!

TOP

tokens=0报错。循环32次后也会出错
试试这样
xxpinqz 发表于 2013-7-1 13:43


嗯,谢谢回答,这个给力,也不会报错……大概能看懂,非常感谢,不过大虾能不能解释下!str:~%addd%,1!这句的意思,或者给个教程的地址也行,再次谢谢大虾的回答

TOP

查了下教程,有这么一句
~在%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 。

现在终于看懂了,松了一口气啊

TOP

本帖最后由 wangjile 于 2013-7-3 14:10 编辑

!str:~%addd%,1!  意思就是从字符串str中取自左侧第1个字符开始以后的内容(顺序为自左向右),而%addd%在这里的意思就是在上述取到的内容中取第%addd%个字符的内容,也就是说m指定范围,n指定具体数值…………不知道我这么理解对不对?

这个新找到的,更便于理解:

set 目标字符串=%源字符串:~起始值,截取长度%

注意,起始值从0开始!
截取长度是可选的,如果省略逗号和截取长度,将会从起始值一直截取到字符串的结尾

TOP

本帖最后由 cutebe 于 2013-7-1 14:52 编辑
  1. @ECHO OFF
  2. SETLOCAL EnableDelayedExpansion
  3. :BEGIN
  4. SET COLOR=0123456789ABCDEF
  5. SET/aBC=!RANDOM!%%16
  6. SET BACK_COLOR=!COLOR:~%BC%,1!
  7. SET COLOR=!COLOR:%BACK_COLOR%=!
  8. SET/aFC=!RANDOM!%%15
  9. SET FRONT_COLOR=!COLOR:~%FC%,1!
  10. COLOR %BACK_COLOR%%FRONT_COLOR%
  11. PAUSE
  12. 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
1

评分人数

如无特别说明,代码测试环境均为 XP SP3

TOP

回复 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
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

嗯,谢谢Batcher大大的教程

TOP

我也受教了,顶起。

TOP

返回列表