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

Что я пытаюсь сделать, так это найти день и месяц и добавить цифры к их значению. За месяц я добавляю 590, а за день я добавляю 470.

Он отлично работает на день, но на месяц, он не работает, и я получаю сообщение об ошибке «Неверный номер. Числовые константы могут быть либо десятичными (17), либо шестнадцатеричными (0x11), либо восьмеричными (021). "

Я ни в коем случае не программист, или знающий в пакетном режиме. Я нашел код для извлечения дня и месяца в Интернете, единственная вещь, которую я сделал сам, - последняя часть, и она, кажется, не работает должным образом. Я предполагаю, что должно быть простое решение.

3 ответа3

1

У меня была эта проблема при извлечении дня и месяца из строки даты.
Добавление предшествующего нуля к %VALUE% в диапазоне 1..9 увеличило ошибку.

Мое решение было что-то вроде этого:

rem -- demo starts with a digit less than 10 but more than octal 7
set VALUE=9
rem -- add value to 100
set /a NEWVALUE=%VALUE%+100
rem -- no calculation but string manipulation : strip all but last two digits
set VALUE=%NEWVALUE:~-2%
rem -- digital environments too should be kept clean ;)
set NEWVALUE=
0

Это означает, что 01 или 07 будут интерпретироваться как восьмеричное число из-за начального 0 . Это сентябрь, а 09 не является действительным восьмеричным числом.

Обходной путь может быть

set /a rmonth+1%month%+490

но это выглядит как уродливый хак. Я с радостью приветствую другой ответ с правильным решением.

0

Примените оператор % Modulus следующим образом:

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

Обратите внимание , что вам необходимо % знак процента в пакетном сценарии (читай побег Проценты):

Символ % имеет особое значение для параметров командной строки и параметров FOR . Чтобы рассматривать процент как обычный символ, удвойте его:

%%

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .