帮忙看一下这一段bat代码,最好每行帮我解释一下.

@echo off & setlocal enabledelayedexpansion
set a=▓
set b=25
set num=1
set c=%%
set d=
:game
if %num% geq 4 set a=%a%▓
set /a b-=1
set /a num+=4
call set d=%%d:~0,%b%%%
if %num% geq 10 set c=%%
if %num% gtr 100 set num=100&set c=%%
color b
echo 进度:%num%%c%
echo %a%

ping/n 1 /w 300 99.99 >nul
if "%num%" neq "100" cls&goto game

该批处理文件在命令行窗口模拟了进度条效果。
第一行
@echo off & setlocal enabledelayedexpansion
@echo off表示对后面的命令只执行其功能但不显示命令。 默认情况下批处理文件没执行一条命令之前显示要执行的命令。加上@echo off屏蔽掉了队命令语句的显示以达到视觉效果。
setlocal enabledelayedexpansion
设置延迟变量。 在执行命令前会对脚本进行预处理,其中有一个过程是变量识别过程,在这个过程中,如果有两个%括起来的如%value%类似这样的变量,就会对其进行识别,并且查找这个变量对应的值,再而将值替换掉这个变量,这个替换值的过程,就叫做变量扩展,然后再执行命令。在这里的作用就是把num, a,b和c作为变量以便动态设置它们的值。其实这半句可以去掉,因为一般情况下批处理文件默认的已经打开了这项功能

set a=▓
set b=25
set num=1
set c=%%
set d=
这个简单 定义四个变量。 其中A是方块序列,一开始只有一个方块,它来最终显示进度条。
b表示进度条刷新的次数, 这个例子中,进度条共刷新25次,每次前进4%。 所以b初值25.
num表示当前进度条完成的百分数。初值为1, 每次刷新增加4个百分点。
c是命令运行后显示的百分号。
d 控制循环的变量, 作用等同于判断b是否大于0,若不大于0则结束。这里定义的有些多余,其实在第四行把num=1改成num=0就可以把这行注释掉。

好了,变量解释完了,现在是命令主体:
:game
::整个过程由25次进度条刷新循环组成,这里是循环入口
if %num% geq 4 set a=%a%▓
::如果num大于等于4, 就在a后面多加一个方块,达到方块越来越多的效果
set /a b-=1
::b(剩余循环次数)减一, /a表示结果转换成10进制整数
set /a num+=4
::num(当前完成百分比)加4, /a表示结果转换成10进制整数
call set d=%%d:~0,%b%%%
::判断是否b小于0结束循环,如果不是则进入下列语句
if %num% geq 10 set c=%%
::当num(当前完成百分比)大于10的时候显示百分号
if %num% gtr 100 set num=100&set c=%%
::当num大于100时将其强制转为100
color b
::定义输出颜色蓝色
echo 进度:%num%%c%
::显示当前百分比进度(带百分号)
echo %a%
::显示模拟进度条
ping/n 1 /w 300 99.99 >nul
::延时函数,延时0.3秒
if "%num%" neq "100" cls&goto game
::如果num小于不等于100则重新进入进入循环
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-03-06
改成这样,会不会好一点??
其实这种样式的进度条,和字符移动
原理都是一样的
就是 不断的刷新屏幕
在这一秒显示一个进度,然后清屏
下一个时间,显示下一个进度,再清屏
一直这样循环,别人说出来帮助不大,你要自己尝试,才会真正的理解

@echo off& mode con cols=45 lines=10& color 0b
setlocal enabledelayedexpansion& set wind=▓
for /l %%1 in (1 1 20)do (for /l %%2 in (1 1 5)do (
set /a snow+=1&& cls&& call echo 进度:%%snow%%%%%%
call echo %%wind%%& for /l %%0 in (1 1 400)do cd.>nul)
call set wind=%%wind%%▓)
pause 1>nul

参考资料:http://zhidao.baidu.com/question/128601880.html

第2个回答  2010-03-20
该批处理文件在命令行窗口模拟了进度条效果。
第一行
@echo off & setlocal enabledelayedexpansion
@echo off表示对后面的命令只执行其功能但不显示命令。 默认情况下批处理文件没执行一条命令之前显示要执行的命令。加上@echo off屏蔽掉了队命令语句的显示以达到视觉效果。
setlocal enabledelayedexpansion
设置延迟变量。 在执行命令前会对脚本进行预处理,其中有一个过程是变量识别过程,在这个过程中,如果有两个%括起来的如%value%类似这样的变量,就会对其进行识别,并且查找这个变量对应的值,再而将值替换掉这个变量,这个替换值的过程,就叫做变量扩展,然后再执行命令。在这里的作用就是把num, a,b和c作为变量以便动态设置它们的值。其实这半句可以去掉,因为一般情况下批处理文件默认的已经打开了这项功能

set a=▓
set b=25
set num=1
set c=%%
set d=
这个简单 定义四个变量。 其中A是方块序列,一开始只有一个方块,它来最终显示进度条。
b表示进度条刷新的次数, 这个例子中,进度条共刷新25次,每次前进4%。 所以b初值25.
num表示当前进度条完成的百分数。初值为1, 每次刷新增加4个百分点。
c是命令运行后显示的百分号。
d 控制循环的变量, 作用等同于判断b是否大于0,若不大于0则结束。这里定义的有些多余,其实在第四行把num=1改成num=0就可以把这行注释掉。

好了,变量解释完了,现在是命令主体:
:game
::整个过程由25次进度条刷新循环组成,这里是循环入口
if %num% geq 4 set a=%a%▓
::如果num大于等于4, 就在a后面多加一个方块,达到方块越来越多的效果
set /a b-=1
::b(剩余循环次数)减一, /a表示结果转换成10进制整数
set /a num+=4
::num(当前完成百分比)加4, /a表示结果转换成10进制整数
call set d=%%d:~0,%b%%%
::判断是否b小于0结束循环,如果不是则进入下列语句
if %num% geq 10 set c=%%
::当num(当前完成百分比)大于10的时候显示百分号
if %num% gtr 100 set num=100&set c=%%
::当num大于100时将其强制转为100
color b
::定义输出颜色蓝色
echo 进度:%num%%c%
::显示当前百分比进度(带百分号)
echo %a%
::显示模拟进度条
ping/n 1 /w 300 99.99 >nul
::延时函数,延时0.3秒
if "%num%" neq "100" cls&goto game
::如果num小于不等于100则重新进入进入循环

回答者: 密码忘记了 - 六级 2010-3-6 06:25

改成这样,会不会好一点??
其实这种样式的进度条,和字符移动
原理都是一样的
就是 不断的刷新屏幕
在这一秒显示一个进度,然后清屏
下一个时间,显示下一个进度,再清屏
一直这样循环,别人说出来帮助不大,你要自己尝试,才会真正的理解

@echo off& mode con cols=45 lines=10& color 0b
setlocal enabledelayedexpansion& set wind=▓
for /l %%1 in (1 1 20)do (for /l %%2 in (1 1 5)do (
set /a snow+=1&& cls&& call echo 进度:%%snow%%%%%%
call echo %%wind%%& for /l %%0 in (1 1 400)do cd.>nul)
call set wind=%%wind%%▓)
pause 1>nul

参考资料: http://zhidao.baidu.com/question/128601880.html

参考资料:改成这样,会不会好一点??

相似回答