Command line 使用运算符时出现的问题“+=&引用;批处理文件

Command line 使用运算符时出现的问题“+=&引用;批处理文件,command-line,batch-file,sum,Command Line,Batch File,Sum,嗯 很简单。我只想在每次使用+=运算符时给一个数字加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,对吗?所以我想我会

嗯 很简单。我只想在每次使用
+=
运算符时给一个数字加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?欧欧欧

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

我快疯了

请找个人帮我解释一下发生了什么事? 我真的不知道

问候,,
Filipe

数字
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>

前导零使事情变得复杂;我本以为“000007”不会以这种方式工作——底线是:“000008”;或者任何带前导零的“8”都将作为字符串处理。例如:

C:\Users\op>set f=foo

C:\Users\op>echo%f%

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


1

当以0作为前缀时,它将作为八进制数重复。和00008不是有效的八进制数。您可以通过以下方式看到其效果:

C:\Users>SET teste=000020

C:\Users>ECHO %teste%
000020

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

其中,八进制的
00020
是十进制的
16

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

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
回应

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

对于大于7的数字,您只会遇到前导零的问题,因为0-7八进制与0-7十进制相同

数字7也没有5个前导零。。但仍然与运营商合作!嘿,谢谢你的回答!没问题,但是。。我很好奇,你能给我解释一下在bash中他们需要处理八进制数是什么吗?除非你说..否则我决不会考虑这件事。。真的那么重要吗?我的意思是,你真的能编写一些比使用小数等其他数字转换更有用的程序吗?顺致敬意,我想这是一个古老的习俗。它也在许多语言中使用,如C、Perl、Ruby等。还支持十六进制,其中类似0x10的内容被解释为16+1。哦,接得好!我曾经知道这一点,但显然已经忘记了。谢谢你的复习。:-)是的,但是已经给出了正确的答案(八进制数),所以我想展示一下,如何避免这种情况。:)