2012-03-18 30 views
4

我希望執行一個批處理文件並讓它自己調用10次。無效的號碼。數字常量是十進制(17),十六進制(0x11)或八進制(021)

set /a iteration=0%1+1 
IF %iteration% EQU 10 exit 
rem Taskkill /IM aspnet_compiler.exe /F 
timeout 1 
call KillBILLd.bat %iteration% 

然而,將只得到8號線

set /a iteration=0%1+1 

Invalid number. Numeric constants are either decimal (17), hexadecimal (0x11), 
or octal (021). 

示數之前,如何解決這個問題?

回答

6

您在該表達式中有0%1 - 如果您的參數爲8,則展開爲08,這不是有效的八進制數(8不是八進制數字),因此您會得到該錯誤。我不是一個批處理文件專家,但我猜你想離開過領先0

set /a iteration=%1+1 

下面是一些SET command documentation的鏈接。

+0

哦~~!我試圖欺騙,因爲我第一次調用批處理文件時,沒有數字被傳入。如果%1爲空,我使用if語句將迭代設置爲零來解決此問題。 – 2012-03-18 22:21:41

+0

但是,沒有必要測試'%1'是否爲空,因爲您的表達式對於空'%1'也有效。 – jeb 2012-03-18 22:28:45

4

正如卡爾所說,前導零是八進制數的符號。
有時,前導零似乎很有用,因爲如果%1爲空,您將避免發生錯誤。

但是,然後你有這種類型的問題,這可以通過使用一點點其他方式解決。

預先計劃1或更好的100然後構建模數也將使用數字8和9(以及空輸入)。

set /a iteration=1000%1 %% 100 + 1 

但在你的情況下,它消除了零應該夠用了,即使%1是空的,你得到了一個有效的表達式。

set /a iteration=%1 + 1 

將擴大到set /a iteration= + 1

+0

謝謝,我會使用它。 – 2012-03-18 22:30:40

相關問題