2012-03-18 2 views
4

배치 파일을 실행하고 자신을 10 번 호출하려고합니다.번호가 잘못되었습니다. 숫자 상수는 십진수 (17), 16 진수 (0x11) 또는 8 진수 (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% 

그러나, 그것은 단지 내가이 오류를 해결할 수있는 방법

set /a iteration=0%1+1 

라인

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

으로 erroring 전에 8 번에받을 수 있습니까?

답변

6

해당 표현식에 0%1이 있습니다. 인수가 8이면 유효한 8 진수 (8은 8 진수가 아님) 인 08으로 확장되므로 해당 오류가 발생합니다. 나는 배치 파일 전문가는 아니지만 당신이 0 최고의 오프 떠나고 싶지 같아요

set /a iteration=%1+1 

는 몇 가지 SET command documentation에 대한 링크입니다.

+0

오에 확장겠습니까! 처음으로 배치 파일을 호출했기 때문에 번호가 전달되지 않았기 때문에 속임수를 쓰려고했습니다. % 1이 (가) 비어 있으면 if 문을 0으로 설정하여이 문제를 해결했습니다. –

+0

그러나 '% 1'이 비어 있는지 테스트 할 필요가 없습니다. 또한 표현식이 빈'% 1'과 함께 유효합니다. – jeb

4

Carl이 말했듯이 선행 0은 8 진수 기호입니다.
가끔 %1이 비어있는 경우 오류를 피할 수 있으므로 앞에 오는 0이 유용 할 것입니다.

하지만이 유형의 문제는 다른 방법으로 해결할 수 있습니다.

앞에 1 또는 더 나은 100을 붙인 다음 모듈로를 만들면 숫자 8과 9 (또한 빈 입력)가 작동합니다.

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

그러나 귀하의 경우

그것은 %1가 유효한 표현을 가지고 비어있는 경우에도 제로가 충분해야 제거.

set /a iteration=%1 + 1 

set /a iteration= + 1

+0

감사합니다. 사용하겠습니다. –