Неправильный номер.Числовые константы могут быть десятичными (17), шестнадцатеричными (0x11) или восьмеричными (021). - PullRequest
4 голосов
/ 19 марта 2012

Я хочу выполнить командный файл и заставить его вызывать себя 10 раз.

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, прежде чем ошибиться с

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

на линии

set /a iteration=0%1+1

Как я могу исправить эту ошибку?

Ответы [ 2 ]

6 голосов
/ 19 марта 2012

У вас есть 0%1 в этом выражении - если ваш аргумент равен 8, он расширяется до 08, который не является действительным восьмеричным числом (8 не является восьмеричным числом), и поэтому вы получаете эту ошибку , Я не специалист по пакетным файлам, но я думаю, что вы хотите оставить без внимания 0:

set /a iteration=%1+1

Вот ссылка на некоторую документацию команды SET .

4 голосов
/ 19 марта 2012

Как сказал Карл, ведущий ноль - это знак восьмеричных чисел.
Иногда кажется полезным использовать начальный ноль, так как вы избежите ошибки, если %1 пусто.

Но тогда у вас возникли проблемы такого типа, которые можно решить, используя немного другой способ.

Добавление 1 или лучше 100, а затем построение модуля также будут работать с числами 8 и 9 (а также с пустым вводом).

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

Но в вашем случае достаточно удалить ноль, даже если %1 пусто, вы получите правильное выражение.

set /a iteration=%1 + 1

Расширится до set /a iteration= + 1

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...