[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

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

  1. set /p t=
  2. set /a s=t+1
  3. echo %s%
  4. pause>nul
复制代码
请问输入9时结果是10 但输入09时怎么结果是1啊 ?
1

评分人数

    • CrLf: 感谢给帖子标题标注[已解决]字样PB + 2

以 0 开头的字符串被当成八进制数字,0x 开头的则被当成十六进制,八进制可用字符为 0~7,十六进制可用字符为 0~f,所以 09 是非法数字,包含非法字符的算式在 set /a 中无法执行,所以 s 没有附新值,s=1 只能说明执行 set /a 之前 s 的值就已经是 1 了
2

评分人数

TOP

哦 这样啊 学习到了 谢谢

TOP

以 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字母,换成其他任何字符串结果都一样。
深层次的原理,待高手解释。
1

评分人数

    • CrLf: 乐于助人PB + 5

TOP

回复 4# 风之语故乡


    噢,我忘了,在 set /a 中直接引用变量名时,只有值为合法数字的变量才会被解释,否则一律当成 0

TOP

话说回去,set /a s=%t%+1才对,

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

也许在Set /a中变量的引用就不需要加%%了,跟defined 一样。

TOP

返回列表