2012-03-18 276 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

相关问题