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

[已解决]批处理set语句/a参数使用计算错误

[复制链接]
发表于 2011-8-12 10:45:02 | 显示全部楼层 |阅读模式
  1. set /p t=
  2. set /a s=t+1
  3. echo %s%
  4. pause>nul
复制代码
请问输入9时结果是10 但输入09时怎么结果是1啊 ?

评分

参与人数 1PB +2 收起 理由
CrLf + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2011-8-12 11:07:40 | 显示全部楼层
以 0 开头的字符串被当成八进制数字,0x 开头的则被当成十六进制,八进制可用字符为 0~7,十六进制可用字符为 0~f,所以 09 是非法数字,包含非法字符的算式在 set /a 中无法执行,所以 s 没有附新值,s=1 只能说明执行 set /a 之前 s 的值就已经是 1 了

评分

参与人数 2技术 +2 收起 理由
Hello123World + 1 乐于助人
Batcher + 1 乐于助人

查看全部评分

 楼主| 发表于 2011-8-12 11:18:03 | 显示全部楼层
哦 这样啊 学习到了 谢谢
发表于 2011-8-12 11:18:32 | 显示全部楼层
以 0 开头的字符串被当成八进制数字,0x 开头的则被当成十六进制,八进制可用字符为 0~7,十六进制可用字符 ...
CrLf 发表于 2011-8-12 11:07



    没错,09会被当做无效的数字八进制数来处理,
但是,貌似也不是说s=1.楼主的代码有个错误,就是 set /a s=%t% +1 才对。
至于s的结果,恰是set /a s=t +1  得到的,这里的t字母,换成其他任何字符串结果都一样。
深层次的原理,待高手解释。

评分

参与人数 1PB +5 收起 理由
CrLf + 5 乐于助人

查看全部评分

发表于 2011-8-12 11:21:19 | 显示全部楼层
回复 4# 风之语故乡


    噢,我忘了,在 set /a 中直接引用变量名时,只有值为合法数字的变量才会被解释,否则一律当成 0
发表于 2011-8-12 15:24:57 | 显示全部楼层
话说回去,set /a s=%t%+1才对,

但是Set /a s=t+1也得到了正确的计算结果。

也许在Set /a中变量的引用就不需要加%%了,跟defined 一样。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-17 21:29 , Processed in 0.019644 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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