中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [已结]怎样去除数字前面的零
作者:
标题: [已结]怎样去除数字前面的零 上一主题 | 下一主题
dnawo
初级用户





积分 38
发帖 13
注册 2008-4-24
状态 离线
『楼 主』:  [已结]怎样去除数字前面的零

这边0010代表一串由四位数字组成的编号,还可能为0001、0010、0100、1000等,希望把前边的零去掉,留下1、10、100、1000即可

───────────────── 版务记录 ─────────────────
执行:HAT
操作:[2008-11-08]在帖子标题中增加搜索关键字
说明:原标题"set a=0010 怎么得到10?[已解决]"不利于论坛搜索
───────────────── 版务记录 ─────────────────


[ Last edited by HAT on 2008-11-8 at 23:59 ]

2008-4-28 16:23
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
bat-zw
金牌会员

永远的学习者


积分 3105
发帖 1276
注册 2008-3-8
状态 离线
『第 2 楼』:  


@echo off
set a=0010
set /a b=100%a%%%100
echo %b%
pause
[ Last edited by zw19750516 on 2008-4-28 at 04:41 PM ]



批处理之家新域名:www.bathome.net
2008-4-28 16:40
查看资料  发送邮件  发短消息 网志  OICQ (841615149)  编辑帖子  回复  引用回复
dnawo
初级用户





积分 38
发帖 13
注册 2008-4-24
状态 离线
『第 3 楼』:  

谢了,那我们再扩展一下,如果不是固定四位数呢?

2008-4-28 16:43
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
huahua0919
银牌会员




积分 1608
发帖 780
注册 2007-10-7
状态 离线
『第 4 楼』:  


@echo off
set a=00100
for /f "delims=0 tokens=1*" %%i in ("1%a%") do (
echo 你要的就是这个:%%j
)
pause
随便扩展

2008-4-28 16:45
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
bat-zw
金牌会员

永远的学习者


积分 3105
发帖 1276
注册 2008-3-8
状态 离线
『第 5 楼』:  

简介批处理中数字(值)的处理方法:

&&我们在批处理中经常要遇到数字(值)的处理,下面我就简单讲一下批处理中数字(值)处理方法:
一、随机数
  在系统变量中有一个随机取值的变量%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%,但要注意两点:1.=号左边的变量一般是不加符号%的(在通过截取字符获得变量时会有如%a:~1,2%的表达示),而右边的变量则必须加;2.运算仅限于整数,如要对小数进行运算可先乘上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个数值都随机取定)则只需写下以下代码(设置部分略去):
CODE:  [Copy to clipboard]
--------------------------------------------------------------------------------

@echo off
set /a a=%random%%%256,b=%random%%%256,c=%random%%%256,d=%random%%%256
set ip=%a%.%b%.%c%.%d%
netsh interface...
四、去零
  数值去零一般是运用在时间计算上,因时间显示一般都是两位不足两位的自动在个位前补零,如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进行取零,代码如下:
CODE:  [Copy to clipboard]
--------------------------------------------------------------------------------

@echo off
set str=07:04:01
for /f "delims=: tokens=1-3" %%a in ("%str%") do (
    set /a a=100%%a%%100,b=100%%b%%100,c=100%%c%%100
)
echo %a%:%b%:%c%&pause>nul
最后显示的结果就是7:4:1。
五、递加(减、乘、除)运算
  在批处理中我们经常要用到递加(减、乘、除)的运算,那怎么实现呢?只有通过循环来实现,有两种循环的方法:一种是for循环,一种是goto循环。如我们要对一个数值5进行递加100次变成105,两种方法的代码如下:
    1.for循环
CODE:  [Copy to clipboard]
--------------------------------------------------------------------------------

@echo off
set n=5
for /l %%i in (1,1,100) do set /a n+=1
echo %n%&pause>nul
  2.goto循环
CODE:  [Copy to clipboard]
--------------------------------------------------------------------------------

@echo off
set n=5
:begin
set /a n+=1
if %n% neq 105 goto begin
echo %n%&pause>nul
同理可实现递减、乘、除和重复四则运算。
  我也就简单讲这么多了,主要是想给初学批处理的新手以自己微薄的帮助,还望各位高人予以补充和指教。



批处理之家新域名:www.bathome.net
2008-4-28 16:47
查看资料  发送邮件  发短消息 网志  OICQ (841615149)  编辑帖子  回复  引用回复
s11ss
银牌会员





积分 2098
发帖 566
注册 2007-9-11
状态 离线
『第 6 楼』:  



  Quote:
Originally posted by dnawo at 2008-4-28 04:43 PM:
谢了,那我们再扩展一下,如果不是固定四位数呢?


@echo off
set a=0010

:t
if %a:~0,1%==0 set a=%a:~1%&goto t

echo %a%
pause


2008-4-28 16:49
查看资料  发短消息 网志   编辑帖子  回复  引用回复
bat-zw
金牌会员

永远的学习者


积分 3105
发帖 1276
注册 2008-3-8
状态 离线
『第 7 楼』:  

除了取余去0的方法,以上的截取字符的方法也是可行的。
但如果要运用在数值运算中,取余的方法是最好的,如:
@echo off&setlocal enabledelayedexpansion
for %%i in (001 0099 00022 000044) do (
     set /a a=100-100%%i%%100
     echo !a!
)
pause>nul
[ Last edited by zw19750516 on 2008-4-28 at 04:59 PM ]



批处理之家新域名:www.bathome.net
2008-4-28 16:52
查看资料  发送邮件  发短消息 网志  OICQ (841615149)  编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: