2013-03-25 65 views
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> 

哇不錯。似乎工作得很好。

從最後一個的行爲,如果我再次使用相同的操作符,它應該只添加一到八個右邊?所以我想我會有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號它不工作應該如何(或者我如何相信這是猜想)

我要瘋了過來。

請有人能幫助我,向我解釋發生了什麼? 我真的不知道!

問候, 菲利普

回答

6

當與0前綴它intrepeated爲八進制數。並且00008不是有效的八進制數。您可以通過以下看到這樣的效果:

C:\Users>SET teste=000020 

C:\Users>ECHO %teste% 
000020 

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

其中00020八進制爲十進制16

+0

嗨Ebbe謝謝你的回答!很清楚,但是..我很好奇,你能解釋一下我們是否需要在bash中處理八進制數?直到你說出來之前,我永遠不會這麼做。這真的很重要嗎?我的意思是,你能真正編程一些比使用其他數字轉換(如小數)更有用的東西嗎?最好的祝福! – 2013-03-26 04:32:58

+1

嗯,這是一個古老的約定,我猜。它也用於C,Perl,Ruby等許多語言中。十六進制也被支持,其中0x10被解釋爲16 – 2013-03-26 05:07:54

+0

+1。哦,很好,趕上!我曾經知道這一點,但顯然已經忘記了。感謝您的複習。 :-) – 2013-03-26 10:58:26

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> 
+0

7號也沒有5個前導零..但仍然與操作員一起工作! – 2013-03-26 04:05:08

0

前導零使事情變得複雜;我預計'000007'不會以這種方式工作 - 底線是:'000008';或者帶有前導零的任何'8'都作爲字符串處理。例如:

C:\用戶\運算>設置F = FOO

C:\用戶\運算>回波%F%

FOO

C:\用戶\ OP>集/ A F + = 1

1

您可以通過刪除leadig零避免這種情況:

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 
+0

非常感謝!但想知道更多關於發生了什麼... – 2013-03-26 04:06:30

+0

是的,但正確的答案已經(八進制數字),所以我想表明,如何避免這一點。 :) – Endoro 2013-03-26 07:33:21

0

針對

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

您將只具有針對數字的前導零煩惱> 7,因爲0-7八是與0-7小數相同!

+0

Yeap!我現在明白了:)非常感謝 – 2013-03-26 15:27:37