win脚本(bat)也能完的很精彩之一进度条
|
以下应一网友要求写的进度条配合BAT脚本批量执行程序时给出程序的执行进度。 同时变相的处理在脚本中遇到的小数问题,我在脚本中做的不够精确,如果需要更高的精确度,可以多添加几次循环。回复该贴中提出的小数问题 http://bbs.bitscn.com/85384脚本内容:@echo off title 程序制作"怕瓦落地".欢迎关注www.BitsCN.com rem 说明: rem 变量b为平均值的整数部分,变量c为平均值的小数部分,变量hs表示需要执行的命令总数并加1,防止程序进入死锁. rem 如果没有小数部分,请把变量c赋零值 rem 变量pjump默认为1表示在编辑note.txt文件时第一行必须为空. color 0a set b=1 set c=0 set /a hs=81 set pjump=1 set a=■ set /a zs=%b% set /a g=%c% rem 上面这部分没什么解释的,是主要变量的相关说明,及赋值。:pstart rem 进度条代码开始 cls set a=%a%■ echo. echo 程序正在安装中,请等待 echo ┌─────────────────────────────────────┐ echo %a% %zs%.%g%%% echo └─────────────────────────────────────┘ rem 进度条代码结束 rem 上面这部分是在该脚本执行中所看到的进度条是如何前进的。rem 下面这行是从文件note.txt中读取预先编辑好的执行命令和参数,关于for命令的解释请参考命令本身帮助系统. for /f "delims=, skip=%pjump% tokens=2" %%m in (note.txt) do set pcmd=%%m & goto jisuo:jisuo echo "正在执行%pcmd%程序" %pcmd% set /a pjump=%pjump%+1 if %pjump%==%hs% goto pexit ::该句是判断文件note.txt中有多少条需要执行的命令,在脚本的开始部分有说明,需要人为的指出,主要的作用是防止脚本在运行中出现意外,或者进入死锁.可有可无.set /a zs=%zs%+%b% set /a d=%d%+c set e=%d% set g=%d% if %d% geq 10 goto xiaoshu goto pstart rem 上面这段是是处理百分比中如果出现小数,也进行粗略的计算,如果想获得更高的精确度可以按照下面这段代码去扩展程序.:xiaoshu set g=%e:~-1% ::扩展变量e 并取变量值的最后一个字符并赋值给变量g,如果变量e此时的值为15,那么此时g得到的值是5 set /a zs=%zs%+1 set /a d=%g% goto pstart rem 上面这段是计算小数部分当小数部分垒加和大于等于10时才会执行,:pexit exit总的来说该脚本的运行思路是读取note.txt中预先编辑的命令和参数并给予执行,每执行完一条命令都会在进度条上反映出执行进度(该脚本只能处理已知的进度并加已表现). 关于在进度条中出现的小数.例如 15.3%. bat脚本中,偶还没有找到能处理小数的命令,所以只能变相的处理了 处理方法是,把一个小数拆分成整数部分和小数部分并分别加以计算 在该脚本中但小数部分垒加和大于等于10时就会向整数部分进1 并做相关处理步骤.脚本中用朱砂红标记出来的就是. 然后把两个部分的计算结果在组合到一起.其实是通过输出命令来做的用深绿色标记出来的就是.并没有相关的组合表达式来做这个步骤,因为不需要代入计算.只是用于显示,足已. 该脚本代码不长但用到的变量较多,应该优化的可能以减少多的变量.请仔细阅读应该不难理解.欢迎交流.待执行命令文件(以下文件内容为事例文件),注意:在测试环境中,复制下面的内容保存为note.txt文件并放在脚本同一目录即可。 事例文件内容 第一行必须为空,否则第一条命令得不到执行。1,ping /n 1 192.168.0.251 >nul 2,ping /n 1 192.168.0.252 >nul 3,ping /n 1 192.168.0.253 >nul 4,ping /n 1 192.168.0.254 >nul 1,ping /n 1 192.168.0.250 >nul 1,ping /n 1 192.168.0.251 >nul 1,ping /n 1 192.168.0.252 >nul 1,ping /n 1 192.168.0.253 >nul 1,ping /n 1 192.168.0.254 >nul 1,ping /n 1 192.168.0.254 >nul 1,ping /n 1 192.168.0.251 >nul 2,ping /n 1 192.168.0.252 >nul 3,ping /n 1 192.168.0.253 >nul 4,ping /n 1 192.168.0.254 >nul 1,ping /n 1 192.168.0.250 >nul 1,ping /n 1 192.168.0.251 >nul 1,ping /n 1 192.168.0.252 >nul 1,ping /n 1 192.168.0.253 >nul 1,ping /n 1 192.168.0.254 >nul 1,ping /n 1 192.168.0.254 >nul 1,ping /n 1 192.168.0.251 >nul 2,ping /n 1 192.168.0.252 >nul 3,ping /n 1 192.168.0.253 >nul 4,ping /n 1 192.168.0.254 >nul 1,ping /n 1 192.168.0.250 >nul 1,ping /n 1 192.168.0.251 >nul 1,ping /n 1 192.168.0.252 >nul 1,ping /n 1 192.168.0.253 >nul 1,ping /n 1 192.168.0.254 >nul 1,ping /n 1 192.168.0.254 >nul 1,ping /n 1 192.168.0.251 >nul 2,ping /n 1 192.168.0.252 >nul 3,ping /n 1 192.168.0.253 >nul 4,ping /n 1 192.168.0.254 >nul 1,ping /n 1 192.168.0.250 >nul 1,ping /n 1 192.168.0.251 >nul 1,ping /n 1 192.168.0.252 >nul 1,ping /n 1 192.168.0.253 >nul 1,ping /n 1 192.168.0.254 >nul 1,ping /n 1 192.168.0.254 >nul 1,ping /n 1 192.168.0.251 >nul 2,ping /n 1 192.168.0.252 >nul 3,ping /n 1 192.168.0.253 >nul 4,ping /n 1 192.168.0.254 >nul 1,ping /n 1 192.168.0.250 >nul 1,ping /n 1 192.168.0.251 >nul 1,ping /n 1 192.168.0.252 >nul 1,ping /n 1 192.168.0.253 >nul 1,ping /n 1 192.168.0.254 >nul 1,ping /n 1 192.168.0.254 >nul 1,ping /n 1 192.168.0.251 >nul 2,ping /n 1 192.168.0.252 >nul 3,ping /n 1 192.168.0.253 >nul 4,ping /n 1 192.168.0.254 >nul 1,ping /n 1 192.168.0.250 >nul 1,ping /n 1 192.168.0.251 >nul 1,ping /n 1 192.168.0.252 >nul 1,ping /n 1 192.168.0.253 >nul 1,ping /n 1 192.168.0.254 >nul 1,ping /n 1 192.168.0.254 >nul 1,ping /n 1 192.168.0.251 >nul 2,ping /n 1 192.168.0.252 >nul 3,ping /n 1 192.168.0.253 >nul 4,ping /n 1 192.168.0.254 >nul 1,ping /n 1 192.168.0.250 >nul 1,ping /n 1 192.168.0.251 >nul 1,ping /n 1 192.168.0.252 >nul 1,ping /n 1 192.168.0.253 >nul 1,ping /n 1 192.168.0.254 >nul 1,ping /n 1 192.168.0.254 >nul 1,ping /n 1 192.168.0.251 >nul 2,ping /n 1 192.168.0.252 >nul 3,ping /n 1 192.168.0.253 >nul 4,ping /n 1 192.168.0.254 >nul 1,ping /n 1 192.168.0.250 >nul 1,ping /n 1 192.168.0.251 >nul 1,ping /n 1 192.168.0.252 >nul 1,ping /n 1 192.168.0.253 >nul 1,ping /n 1 192.168.0.254 >nul 1,ping /n 1 192.168.0.254 >nul 1,ping /n 1 192.168.0.251 >nul 2,ping /n 1 192.168.0.252 >nul 3,ping /n 1 192.168.0.253 >nul 4,ping /n 1 192.168.0.254 >nul 1,ping /n 1 192.168.0.250 >nul 1,ping /n 1 192.168.0.251 >nul 1,ping /n 1 192.168.0.252 >nul 1,ping /n 1 192.168.0.253 >nul 1,ping /n 1 192.168.0.254 >nul 1,ping /n 1 192.168.0.254 >nul不要笑我老土,土,也是一种时尚。---- 能否加个详细点的注解?每一句语句的意思,以及它与前后的关联什么的,最好能详细点。七夕银河 一个不想当将军的裁缝,绝不是一个好司机! 郁闷,网警兄弟是不是活在80年代的啊?开个玩笑都会被盯上!---- 人家是玩写电影 :)http://blog.n3tl04d.cn 万里长城十亿兵,国耻岂待儿孙平 愿提十万虎狼旅,越马提刀入东京 ====================== 对某版主处理问题的态度感到不满---- iamshiyu 于 2007-3-8 16:51 发表 能否加个详细点的注解?每一句语句的意思,以及它与前后的关联什么的,最好能详细点。 以在脚本中做相关说明了.不要笑我老土,土,也是一种时尚。---- 还是没看明白你这个程序到底干什么用的……七夕银河 一个不想当将军的裁缝,绝不是一个好司机! 郁闷,网警兄弟是不是活在80年代的啊?开个玩笑都会被盯上!---- 呵呵, 仔细看看原代码。 就明白了。不要笑我老土,土,也是一种时尚。---- nb---- 写的不错啊---- ---- 挺详细的 |
》热 点 关 注
》编 辑 推 荐
》相 关 图 文
