![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-08 22:10 |
共 47,811 主题排行 / 349,895 发帖 / 今日 0 篇 / 48,253 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » 简介批处理中数字(值)的处理方法: |
| 可打印版本 2,033 / 10 |
| 第1楼 bat-zw | 发表于 2008-04-18 15:12 |
| 金牌会员 发帖 1,276 积分 3,105 | |
|
简介批处理中数字(值)的处理方法: &&我们在批处理中经常要遇到数字(值)的处理,下面我就简单讲一下批处理中数字(值)处理方法:
一、随机数 在系统变量中有一个随机取值的变量%random%,其为0-32767之间的十进制数字,利用这个变量我们就能取得我们想要的任一组随机数字(等下会说明方法)。 二、四则运算 如我们要对一个变量(数值)进行运算,则可使用set /a命令,如:set /a str+=1就是把变量str的数值加上1,同样只要把这个命令中的+改成-、*、/就可以完成对该数值的减1、乘1、除1运算了,而更重要的是我们可以通过set /a命令来进行四则运算,如:set /a str=5*6+4*3-2*7,也可以进行变量和变量间的四则运算,如:set /a str=%a%/%b%*%c%-%d%,但要注意一点:运算仅限于整数,如要对小数进行运算可先乘上10的n次方。 三、取余 所谓余数就是除数除以被除数剩下的值,在批处理中取余运算符是用%%来表示的,如:%random%%%56就是把不断地把随机数除以56取余数,得到的数值一定是处在0-55间的,那么我们只要set /a a=%random%%%56就能把变量a的值设定在0-55间(大家想一下为什么a不会等于56),如要把a设定在1-56间,则只需set /a a=%random%%%56+1,我们了解了这点是很重要的,如要随机设定一台机器的ip(假设4个数值都随机取定)则只需写下以下代码(设置部分略去): 四、去零 数值去零一般是运用在时间计算上,因时间显示一般都是两位不足两位的自动在个位前补零,如07:04:01,这就给我们在运算中带来麻烦,所以对时间进行运算应该先去零,方法其实也很简单,就是利用取余运算,如要对08去零则只在08前面加上10变成108再不断地除以10余数肯定是8,如时间变量a(值为08)的运算公式为:set /a a=10%a%%%10,但时间是有两位数的,因此要将上面的公式变为set /a a=100%a%%%100,现在我们对上面的07:04:01进行取零,代码如下: 最后显示的结果就是7:4:1。 五、递加(减、乘、除)运算 在批处理中我们经常要用到递加(减、乘、除)的运算,那怎么实现呢?只有通过循环来实现,有两种循环的方法:一种是for循环,一种是goto循环。如我们要对一个数值5进行递加100次变成105,两种方法的代码如下: 1.for循环 2.goto循环 同理可实现递减、乘、除和重复四则运算。 我也就简单讲这么多了,主要是想给初学批处理的新手以自己微薄的帮助,还望各位高人予以补充和指教。 [ Last edited by zw19750516 on 2008-6-23 at 06:04 PM ] |
|
| 第2楼 huahua0919 | 发表于 2008-04-18 16:17 |
| 银牌会员 发帖 780 积分 1,608 | |
|
但要注意两点:1.=号左边的变量是不加符号%的,而右边的变量则必须加
set a=abc set /a %a:~0,1%+=1 [ Last edited by huahua0919 on 2008-4-19 at 01:17 PM ] |
|
| 第3楼 bat-zw | 发表于 2008-04-18 20:43 |
| 金牌会员 发帖 1,276 积分 3,105 | |
|
谢谢: 多谢指出,已修改。
|
|
| 第4楼 lxmxn | 发表于 2008-04-19 12:27 |
| 版主 发帖 4,938 积分 11,386 | |
|
不错的基础教程。
不过有些地方需要注意一下: 但要注意两点:1.=号左边的变量一般是不加符号%的(在通过截取字符获得变量时会有如%~a,2%的表达示),而右边的变量则必须加; 在做算术运算时,右边的变量可以不必加符号%,加了反而使表达式的易读性降低了。 另外,2 楼的 “set /a %a:~0,1%+=1” 貌似是个错误的表达式。 |
|
| 第5楼 huahua0919 | 发表于 2008-04-19 12:43 |
| 银牌会员 发帖 780 积分 1,608 | |
|
回斑竹,以前我也没接触过,不过看zh159写过才豁然开朗的
现贴出代码 |
|
| 第6楼 lxmxn | 发表于 2008-04-19 12:55 |
| 版主 发帖 4,938 积分 11,386 | |
Originally posted by huahua0919 at 2008-4-19 12:43: |
|
| 第7楼 huahua0919 | 发表于 2008-04-19 13:16 |
| 银牌会员 发帖 780 积分 1,608 | |
|
这个当然会报错误
只是说明楼主的一个变量形式 已经改正 |
|
| 第8楼 ggyy66 | 发表于 2008-05-28 23:09 |
| 初级用户 发帖 69 积分 173 | |
|
顶下,谢楼主好
|
|
| 第9楼 moniuming | 发表于 2008-05-29 12:12 |
| 银牌会员 发帖 574 积分 1,335 来自 广西 | |
四、去零 本来就对这里的计算有一些想法的,不过不想说出来罢了,但看到LZ人气不盛的帖子后决定谈谈自己的一些看法,其实楼主红色部分的描述有一些失误,要把08去0,只须在08之前加1再取其除以100的余数即可,即所举的例子改为以下就可以了(效率要高一点点,虽然并不明显): 不过本人对时间的计算并不是采取取余的方法,如下: |
|
| 第10楼 mcubird | 发表于 2008-09-05 15:49 |
| 初级用户 发帖 17 积分 40 | |
|
如果一个4位数,前面有可能有1~3个0,怎么自适应去0?
|
|
| 第11楼 HAT | 发表于 2008-09-05 16:23 |
| 版主 发帖 5,017 积分 9,023 | |
|
Re 10楼 |
|
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |