2

好的,这很简单。每次使用+=运算符时,我只想给一个数字加 1!

所以我像这样进入提示:

C:\Users\fsilveira>SET teste=000007

C:\Users\fsilveira>ECHO %teste%
000007

C:\Users\fsilveira>SET /A teste+=1
8
C:\Users\fsilveira>

喔不错哟。似乎工作得很好。

从上一个的行为来看,如果我再次使用相同的运算符,它应该只是添加 1 到 8 对吗?所以我想我会有9个?但这是正在发生的事情:

C:\Users\fsilveira>SET teste=000008

C:\Users\fsilveira>ECHO %teste%
000008

C:\Users\fsilveira>SET /A teste+=1
1
C:\Users\fsilveira>

什么?8 + 1 是 1 吗?o_O

当涉及到数字 8 时,它不应该如何工作(或者我认为它应该如何工作)

我在这里要疯了。

请有人可以帮助我并向我解释发生了什么?我真的不知道!

问候,菲利普

4

5 回答 5

6

当以 0 为前缀时,它被插入为八进制数。并且 00008 不是有效的八进制数。您可以通过以下方式看到它的效果:

C:\Users>SET teste=000020

C:\Users>ECHO %teste%
000020

C:\Users>SET /A teste+=1
17

其中00020八进制是16十进制。

于 2013-03-25T23:11:50.157 回答
1

该数字8没有 5 个前导零。如果您在做数学,请使用实数。:-)

这在我的机器上运行良好,在 Win7 64 位的命令窗口中:

C:\Users\Ken>set /a teste=8
8
C:\Users\Ken>set /a teste+=1
9
C:\Users\Ken>set /a teste+=1
10
C:\Users\Ken>echo %test3%
10

C:\Users\Ken>
于 2013-03-25T23:03:10.853 回答
1

您可以通过删除前导零来避免这种情况:

C:\>set teste=000008

C:\>echo %teste%
000008

C:\>for /f "tokens=1*delims=0" %i in ("$0%teste%") do @set teste=%j

C:\>set /a teste+=1
9
于 2013-03-25T23:40:15.207 回答
0

作为回应

"number 7 doesn't have 5 leading zeros too.. but still works with the operator!"

您只会遇到数字 > 7 的前导零的问题,因为 0-7 Octal 与 0-7 Decimal 相同!

于 2013-03-26T08:20:08.330 回答
0

前导零使事情变得复杂;我本来预计'000007'不会以这种方式工作 - 底线是:'000008'; 或任何带有前导零的“8”都被作为字符串处理。例子:

C:\Users\op>设置 f=foo

C:\Users\op>回显 %f%

C:\Users\op>set /a f+=1

1

于 2013-03-25T23:10:59.483 回答