Board logo

标题: [其他] 截取字符串的批处理里面的两个特殊的值为何出错? [打印本页]

作者: abxialiang    时间: 2010-4-23 13:23     标题: 截取字符串的批处理里面的两个特殊的值为何出错?

试下:
@echo off
set "date1=abcdefghijk"
echo %date1:~01,2%-----01
echo %date1:~02,2%-----02
echo %date1:~07,2%-----07
echo %date1:~08,2%-----08
echo %date1:~8,2%-----8
echo %date1:~09,2%-----09
echo %date1:~9,2%-----9
pause

输出结果是:
bc-----01
cd-----02
hi-----07
date1:~08,2-----08
ij-----8
date1:~09,2-----09
jk-----9

说明08,09出问题了,我还蓝过屏,是什么原因呢?(当然严格说起来可以说08,09不是一个数值,但是01,02都行)
作者: GNU    时间: 2010-4-23 13:25

08、09被误认为是八进制数了吧
作者: x9tiancmd    时间: 2010-4-23 13:41

有很多这样的例子了,  自己知道会出错所以不会去试, 一般没有必要学那样写吧(那好像是创造问题),○( ̄﹏ ̄)○
作者: Spring    时间: 2010-4-23 15:50

8进制是0开头,不能出现8以上的数字;
16进制是0x开头,不能出现 g 以上字符。


  1. @echo off
  2. set "date1=abcdefghijklmnopqrstuvwxyz"
  3. echo %date1:~01,2%-----01
  4. echo %date1:~02,2%-----02
  5. echo %date1:~07,2%-----07
  6. echo %date1:~08,2%-----08
  7. echo %date1:~8,2%-----8
  8. echo %date1:~0x8,2%-----0x8
  9. echo 注意下面
  10. echo %date1:~11,2%-----11
  11. echo %date1:~013,2%-----013
  12. echo %date1:~0xb,2%-----0xb
  13. pause
复制代码

[ 本帖最后由 Spring 于 2010-4-23 15:55 编辑 ]
作者: hanyeguxing    时间: 2010-4-23 16:02

批处理的语法中明确:数值是指十进制的数字,在前缀加 0× 则表示十六进制数字,加 0 则表示八进制数字。因此,八进制表示法容易引起混淆。例如,08 和 09 不是有效数字,因为 8 和 9 不是有效的八进制数字。

[ 本帖最后由 hanyeguxing 于 2010-4-23 16:03 编辑 ]
作者: abxialiang    时间: 2010-4-23 17:36     标题: 回复 4楼 的帖子

谢谢,我知道原因了。。。。。。




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2