灯火互联
管理员
管理员
  • 注册日期2011-07-27
  • 发帖数41778
  • QQ
  • 火币41290枚
  • 粉丝1086
  • 关注100
  • 终身成就奖
  • 最爱沙发
  • 忠实会员
  • 灌水天才奖
  • 贴图大师奖
  • 原创先锋奖
  • 特殊贡献奖
  • 宣传大使奖
  • 优秀斑竹奖
  • 社区明星
阅读:4171回复:0

批处理 数码雨代码解释

楼主#
更多 发布于:2013-06-14 09:21
详细解释批处理的一些说明,推荐新手跟老手学习。

做了一个批处理的数码雨,老题目了

主要给新手看
主要用于了解批处理的一下知识
1.随机变量的使用
2.变量的叠加
下面是源代码:

复制代码代码如下:

@echo off 
color 0a 
:start 
set num=0 
set "echos= " 
:num 
set /a a1=%random%%%3 
if "%a1%" == "1" set "a1= " 
if "%a1%" == "2" set "a1= " 
if "%a1%" == "0" set /a a1=%random%%%2 
set echos=%echos%%a1% 
set /a num=%num%+1 
if "%num%" == "75" echo %echos%&&goto :start 
goto :num

我来详细解释一下

复制代码代码如下:

@echo off 
::关闭回显(不用说了吧) 
 
color 0a 
::这句的意思是改变批处理的字体颜色,0a就是颜色代码(具体可以看Color命令) 
 
:start 
 
set num=0 
::定义(重新定义)num的变量,值为0(我们用这个变量来计算批处理循环的次数) 
 
set "echos= " 
::定义(重新定义)echos的变量,值为一个空格 
 
:num 
 
set /a a1=%random%%%3 
::这句就很重要了,这句可以说是整个数码雨代码的核心 
::这句的意思是定义一个随机数,值在"3"以下 
::要限制随机数的值,必须用set命令的/a开关 
::比如我想定义一个num的变量,这个变量是随机数,切必须小于20,那代码就是 
::set /a num=%random%%%20 
::以上是完整的代码,如果没有使用/a开关写成了set num=%random%%%20 
::那么就会出现错误 
 
if "%a1%" == "1" set "a1= " 
::这句意思是如果变量a1(也就是上一句的随机变量)值是1的话那么a1的值就是一个空格 
::Ps(这里我有必要说一下) 
::我们程序的目的是模拟数码雨 
::大家也许也看过数码雨,数码雨不是全是0和1,中间也是有空隙的,这句就是为了达到这个目的 
::下面一句也是同样的目的 
::最后还有一点要提 
::不知大家发现没有我们之前的语句我没有用双引号如set num=0 
::而这句 set "a1= " 却用了双引号,这是为什么呢 
::其实,之前的语句set num=0,也可以改为set "num=0" 
::这样似乎显得比较标准,是不是 set "a1= " 也可以改为 set a1= 呢 
::答案是"No" 
::因为set a1=这句就算你在语句后面加入了空格,批处理也不会去识别 
::导致了a1的值为空,在批处理中,变量的值是不能为空的,所以我们用空格代替 
::就写成 set "a1= " 
 
 
 
if "%a1%" == "2" set "a1= " 
::如果a1值为2,那么a1的值就是一个空格 
 
 
if "%a1%" == "0" set /a a1=%random%%%2 
::这句的意思是,如果随机变量a1的值为0,那么a1的值将随机取一个2以下的整数 
::换句话说就是如果a1值是0,那么a1就随机选0和1两个数 
 
set "echos=%echos%%a1%" 
::这里就是我所说的变量叠加 
::之所以用引号是因为a1也有可能是空格 
::其次就是echos=%echos% .. 我们现在只看这段 
::这句话的意思是定义echos变量为 变量echos和变量a1的 值 
::是不是有些晕 
::我们在程序开始时就把echos变量定为一个空格了 
::所以这次定义就吧echos定义为 一个空格+变量a1 
::是不是清晰了点? 
::我们用实例来吧 
::变量echos现在是一个空格我们用[空格]代替 
::我们再假设变量a1是数字1 
::那么这次变量就是把 echos定义为 [空格]+1 
::所以语句执行后echos 的值就是 一个空格然后是数字1 
::对吧...清晰了吧?这句其实就是变量叠加 
::如果语句继续执行,那么echos 的值是 "[空格]1" 吧? 
::然后程序再次执行a1的值假设是数字2 
::那么set "echos=%echos%%a1%"的意思就是 
::定义变量echos的值为 "[空格]1" + 数字2,也就是 "[空格]12" 
::..... 
 
set /a num=%num%+1 
::这句意思是变量num的值加一(也就是循环了一次) 
 
if "%num%" == "75" echo %echos%&&goto :start 
::当循环执行以上语句了75次后显示一次叠加的变量echos 
::换句话说就是循环以上语句75次后显示变量echos 
 
 
goto :num 
::跳转到标签num

附Color命令各类颜色代码

图片:559540.jpg


喜欢1 评分0

最新喜欢:

coolmancoolma...
游客

返回顶部