中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-06-14 23:04
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [已结]请教如何将字符转换成数字的问题
楼 主 [已结]请教如何将字符转换成数字的问题 发表于 2006-04-09 12:40 ·  中国 福建 三明 电信
中级用户
★★
积分 316
发帖 83
注册 2005-03-01 00:00
UID 36626
性别 男
状态 离线
如有:
0005
0020
0036
0303


如何将以上各个字符串转换成


5
20
36
303


平台:WINXP

[ Last edited by willsort on 2006-4-10 at 12:46 ]
2 发表于 2006-04-09 13:27 ·  中国 重庆 联通
高级用户
★★
积分 772
发帖 273
注册 2004-10-23 00:00
UID 32861
性别 男
状态 离线
set a=0005
set /a b=%a%+0
echo %b%
set c=0020
set /a d=%c%+0
echo %d%
set e=0036
set /a f=%e%+0
echo %f%
set g=0303
set /a h=%g%+0
echo %h%
http://www.msfans.net/bbs/
3 发表于 2006-04-09 17:10 ·  中国 福建 三明 电信
中级用户
★★
积分 316
发帖 83
注册 2005-03-01 00:00
UID 36626
性别 男
状态 离线
谢谢 !

原来这样也行,厉害
4 发表于 2006-04-09 17:31 ·  中国 福建 三明 电信
中级用户
★★
积分 316
发帖 83
注册 2005-03-01 00:00
UID 36626
性别 男
状态 离线
还是发现一个问题

当数字8,9前有0时就不行了

也就是8进制的表示问题
5 发表于 2006-04-09 18:14 ·  中国 重庆 联通
高级用户
★★
积分 772
发帖 273
注册 2004-10-23 00:00
UID 32861
性别 男
状态 离线
其实还可以这样的%a:0=%
比如
set a=0008
set b=%a:0=%
echo %b%
http://www.msfans.net/bbs/
6 发表于 2006-04-09 18:42 ·  中国 山西 运城 中移铁通
元老会员
★★★★
Batchinger
积分 4,432
发帖 1,512
注册 2002-10-18 00:00
UID 19
性别 男
状态 离线
Re chenhui530:

set b=%a:0=% 仍然存在问题,比如对 0020 的处理。

对于长度固定为4的数字串,可以考虑以下方案:

set n=0020
set /a n=1%n%-10000
※ Batchinger 致 Bat Fans:请访问 批处理编程的异类 ,欢迎交流与共享批处理编程心得!
7 发表于 2006-04-09 19:06 ·  中国 重庆 联通
高级用户
★★
积分 772
发帖 273
注册 2004-10-23 00:00
UID 32861
性别 男
状态 离线
呵呵
好久没看到willsort兄了
http://www.msfans.net/bbs/
8 发表于 2006-04-09 19:16 ·  中国 福建 三明 电信
中级用户
★★
积分 316
发帖 83
注册 2005-03-01 00:00
UID 36626
性别 男
状态 离线
谢谢二位!!!问题解决了

小弟的字符串刚好都是一样的位数
9 发表于 2006-04-10 11:17 ·  中国 广东 广州 中移铁通
中级用户
★★
积分 256
发帖 93
注册 2006-03-26 22:12
UID 52853
性别 男
来自 广东
状态 离线
2楼.兄弟 和 6楼版主
的思路不错啊.
把数字字符串 通过加减运算来去掉不用的0
10 别急着结啊,我这还有问题呢 发表于 2006-04-10 20:23 ·  中国 北京 鹏博士BGP
中级用户
★★
积分 404
发帖 179
注册 2006-03-30 14:44
UID 53056
状态 离线

echo ----------------------------执行信息----------------------------
For %%a in (*.pdf) do call :name "%%a"
echo ----------------------------------------------------------------
echo 执行完毕,按任意键退出
pause >nul
exit

:name
set name="%~n1"
set name=%name:~-5%
if %name:~0,1%==0 set /a name=1%name%-10000
rename %1 %name%.pdf
echo %~n1.pdf 改名为 %name%.pdf
goto :eof


这个就可以用了,但是还有点小问题没搞定呢
希望大家给点思路

我的文件都是四位数字前面还有字符的 比如 20060410190040_ps_p0040.pdf
或者 农电全文最新_ps_p0021.pdf
执行的时候如果说这个文件主名本身不够4个字符的时候就会出错(因为我已经执行过一次,执行过的文件主名都不到4位了,它执行到set name=%name:~-5%)的时候就出错了

[ Last edited by kcdsw on 2006-4-10 at 20:27 ]
11 发表于 2006-04-10 23:47 ·  中国 辽宁 锦州 中移铁通
荣誉版主
★★★
积分 1,338
发帖 356
注册 2005-07-15 12:09
UID 40733
性别 男
状态 离线
TO: kcdsw
可以尝试下面的代码.


  1. @echo off
  2. echo ----------------------------执行信息----------------------------
  3. for /f "delims=" %%a in (' dir /b *.pdf ') do call :name "%%a"
  4. echo ----------------------------------------------------------------
  5. echo 执行完毕,按任意键退出
  6. pause >nul
  7. exit

  8. :name
  9. set name=%~1
  10. ::以下两句删除下划线之前的字符
  11. set name=%name:*_=%
  12. set name=%name:*_=%

  13. ::以下循环可以删除前导字母和零
  14. :loop
  15. set m=%name:~0,1%
  16. if "%m%" LEQ "9" (
  17. if "%m%" GTR "0" (
  18. echo rename %1 "%name%"
  19. rename %1 "%name%" >nul
  20. goto :EOF
  21. )
  22. )
  23. set name=%name:~1%
  24. goto loop

  25. goto :EOF
-=代码着色 BY:无奈何=-

根据 willsort 兄的提醒修正了一下,请注意第三行与 kcdsw 兄原帖的区别。

[ Last edited by 无奈何 on 2006-4-14 at 19:04 ]
  ☆开始\运行 (WIN+R)☆
%ComSpec% /cset,=何奈无── 。何奈可无是原,事奈无做人奈无&for,/l,%i,in,(22,-1,0)do,@call,set/p= %,:~%i,1%<nul&ping/n 1 127.1>nul

12 发表于 2006-04-11 13:12 ·  中国 北京 鹏博士BGP
中级用户
★★
积分 404
发帖 179
注册 2006-03-30 14:44
UID 53056
状态 离线
呵呵 首先谢谢无奈何兄
不过我这里的文件有个特点,后面都是四位的数字,而前面的字符不定有可能有2个或者3个以上的下划线
唯一能摸到规律的就是后四位数字.
pdf是与页面相关的,每个文档是一页,每个数字是与其相关的页码
一般书不会超过9999页(至少我这里没有),所以没考虑10000页及其上的页面的容错

刚用无奈何兄写的pdf大概测试了一下,存在一个问题 文件名会被改错掉
13 发表于 2006-04-11 15:49 ·  中国 四川 绵阳 电信
高级用户
★★
积分 587
发帖 282
注册 2006-04-10 03:40
UID 53599
性别 男
状态 离线
干嘛非得用批处理不可,用UE32或者ACDSee都是非常方便的
14 发表于 2006-04-11 19:51 ·  中国 北京 鹏博士BGP
中级用户
★★
积分 404
发帖 179
注册 2006-03-30 14:44
UID 53056
状态 离线
是在执行其他的bat的时候调用它
15 发表于 2006-04-11 21:21 ·  中国 广东 广州 教育网
铂金会员
★★★★
C++启程者
积分 5,154
发帖 1,827
注册 2003-07-18 00:00
UID 7105
性别 男
状态 离线
用C的 atoi 写个小程序就结啦!
论坛跳转: