当前位置:DOS资源站资料中心批处理教程 → 模拟WINDOWS开机进度条的批处理的代码解释

模拟WINDOWS开机进度条的批处理的代码解释

减小字体 增大字体 作者:佚名  来源:本站整理  发布时间:2008-5-1 2:07:40

@echo off &title DOS资源站 www.cmdos.net
setlocal enabledelayedexpansion
set /a b=81
set a=">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>================================================================================"


:back
cls
for /l %%i in (1,1,20) do @echo.
echo                        Loading Windows 2000...        
set /a b-=1
echo !a:~%b%,80!
if !b! == 1 goto :eof
call :delay 80
goto back


:delay  
set /a num=num + 1
if %num% geq %1 (set num=) && goto :eof
goto delay
前段时间在批处理转载区发了一个模拟2K开机进度条的批处理,现在以我的理解方法给大家解释一下,有错误难免,还请大家多多指点!
代码如上!
看下面

@echo off
嗯,这个就不用解释啦,屏蔽屏幕上的命令

setlocal enabledelayedexpansion
这个是开启变量延迟,具体说明请查看 setlocal/?
提一下,当开启了变量延迟后,当要用到变量延迟是地方,两个变量用两!号给括起来,而非%

set /a b=81
设置变量b的值为81,这个/a参数在这里没有什么意义,可以不用,它是执行计算的意思

set a=">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>================================================================================"
这也是一样设置变量a的值,这个引号是因为有特殊字符

例:
set aa=>>
此时不应有 >。
  看,它就会出错

  而
set bb=">>"

  再
echo %bb%
">>"
  那,出来啦,这就是引号的一个好的用法

:back
cls
上面二个就不用说啦,一个是标签名,另一个是清除屏幕

for /l %%i in (1,1,20) do @echo.
这个是在屏幕上显示20行空行,就是相当于20个echo.用&符号给连起来的意思一样
括号中的数字说明该集表示以增量形式从1到20的一个数字序列
  因此,(1,1,3) 将产生序列 1 2 3,(3,-1,1) 将产生 序列 (3 2 1)

echo                        Loading Windows 2000...        
这个也不用解释了吧,就是在屏幕上显示后面的信息

set /a b-=1
嗯,这个是设置变量b等于81-1,也就是等于80,每循环一次就减一次
set /a b-=1 也就是等于  set /a b=%b%-1
学过编程语言的一看就知道啦
set /a b+=1 也就是等于  set /a b=%b%+1
同理还有很多

echo !a:~%b%,80!
这里就是显示变量a的信息,上面有说set /a b-=1,己经定义了变量b的值为80,这里就是显示变量
  a里的第80个字符开始的80个字符,然后利用goto来跳转到前面,经过CLS清屏,set /a b-=1
  处理变量b的值,注意这里变量b己经减了1就是80了,这里再减一就变成79了。然后又到这
  里 echo !a:~%b%,80!,就是显示变量a里的第79个字符开始的80个字符,它的工作原理就是这样,
  怎样,明白了吧各位!

if !b! == 1 goto :eof
注意看这一句,就是当变量b的值经过一系列运算后变成1后,程序就退出
  GOTO 命令现在接受目标标签 :EOF,这个标签将控制转移到当前
  批脚本文件的结尾,不定义就退出程序!

call :delay 80
这个是调用子标签delay 把80作为它的第一个参数

CALL 命令现在将卷标当作 CALL 的目标,接受语法是:

    CALL:label arguments

一个新的批文件上下文由指定的参数所创建,就是说卷标被指定后
您必须通过跳转到批脚本文件末两次(goto :eof),读到第一次文件
末时,控制会回到 CALL 语句的紧后面。第二次会退出批脚本。

:delay  
set /a num=num + 1
if %num% geq %1 (set num=) && goto :eof
goto delay
这是子标签delay,放在一起来解释好点!
先是计算变量num的值为%num%+1,它这里前面没有定义变量num,所以
变量num的值就是1啦,每循环一次就加一次,然后当变量num的值大于或
等于80时就清空变量的值,再返回主程序!前面有说当变量num的值大
于或等于80时就清空变量的值,那么不等于或大于80时就跳转到标签
delay继续!说白啦,它就是在做延时处理,直接用ping -n 1 127.1>nul
来处理作者可能觉的不理想吧!

在IF里面有如下比较运算符
    EQU - 等于
    NEQ - 不等于
    LSS - 小于
    LEQ - 小于或等于
    GTR - 大于
    GEQ - 大于或等于