找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 14774|回复: 5

[其他] 截取字符串的批处理里面的两个特殊的值为何出错?

[复制链接]
发表于 2010-4-23 13:23:07 | 显示全部楼层 |阅读模式
试下:
@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都行)
发表于 2010-4-23 13:25:04 | 显示全部楼层
08、09被误认为是八进制数了吧
发表于 2010-4-23 13:41:31 | 显示全部楼层
有很多这样的例子了,  自己知道会出错所以不会去试, 一般没有必要学那样写吧(那好像是创造问题),○( ̄﹏ ̄)○
发表于 2010-4-23 15:50:12 | 显示全部楼层
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 编辑 ]
发表于 2010-4-23 16:02:11 | 显示全部楼层
批处理的语法中明确:数值是指十进制的数字,在前缀加 0× 则表示十六进制数字,加 0 则表示八进制数字。因此,八进制表示法容易引起混淆。例如,08 和 09 不是有效数字,因为 8 和 9 不是有效的八进制数字。

[ 本帖最后由 hanyeguxing 于 2010-4-23 16:03 编辑 ]
 楼主| 发表于 2010-4-23 17:36:10 | 显示全部楼层

回复 4楼 的帖子

谢谢,我知道原因了。。。。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 02:45 , Processed in 0.023345 second(s), 11 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表