Falha de lote “constantes numéricas são decimais, hexadecimais ou octal” ao executar a adição, por que isso acontece / como resolvê-lo?

0
for /f "delims=" %%a in ('wmic OS Get localdatetime ^| find "."') do set dt=%%a
set month=%dt:~4,2%
set day=%dt:~6,2%
set /a rday=%day%+470
set /a rmonth+%month%+590
echo %rmonth%
echo %rday%
pause

O que estou tentando fazer é encontrar o dia e o mês e adicionar números ao valor deles. Para o mês, estou adicionando 590 e, para o dia, estou adicionando 470.

Funciona bem durante o dia, mas, para o mês, não funciona e eu recebo o erro "Número inválido. As constantes numéricas são decimais (17), hexadecimal (0x11) ou octal (021). "

Não sou de forma alguma um programador ou conhecedor em lote. Eu encontrei o código para extrair o dia e o mês na internet, a única coisa que fiz sozinho é a última parte, e não parece funcionar corretamente. Eu suponho que deve haver uma solução simples.

    
por Henry 19.09.2017 / 13:17

2 respostas

0

Isso significa que 01 ou 07 seria interpretado como um número octal devido à porcentagem de 0 . É setembro e 09 não é um número octal válido.

Uma solução alternativa poderia ser

set /a rmonth+1%month%+490

mas isso parece um hack feio. Terei prazer em promover outra resposta com a solução certa.

    
por 19.09.2017 / 13:21
0

Aplique o operador % Modulus da seguinte forma:

for /f "delims=" %%a in ('wmic OS Get localdatetime ^| find "."') do set dt=%%a
set month=%dt:~4,2%
set day=%dt:~6,2%
set /a rday=1%day%%%100+470
rem         ↑     ↑↑
set /a rmonth=1%month%%%100+590
rem           ↑       ↑↑
echo %rmonth%
echo %rday%
pause

Observe que você precisa dobrar % por cento para fazer login em um script em lote (leia Escaping Percents ):

The % character has a special meaning for command line parameters and FOR parameters. To treat a percent as a regular character, double it:

%%
    
por 19.09.2017 / 13:38

Tags