Итак, я пишу командный файл, который создает резервные копии определенного файла, при этом очищая старые записи так часто. Я столкнулся с проблемой, когда было бы проще и удобочитаемо хранить месячные длины (для целей расчета) (days1, days2, days3 и т. Д.) И ссылаться на них, объединяя слово days с переменной, которая хранит месяц (1, 2, 3 и т. Д.). К сожалению, это никогда не ссылается на правильную переменную правильно. Вот соответствующий код из секции вычисления даты 28 дней назад:Как связать значение переменной с именем другого в пакетном файле?
set days1=31
set days2=28
set days3=31
set days4=30
set days5=31
(etc.)
...
set pastmonthday=%curday%-28
set pastmonthmonth=%curmonth%
set pastmonthyear=%curyear%
if %pastmonthday% lss 0 (
set /a pastmonthmonth=%pastmonthmonth%-1
set /a pastmonthprevmon=1
)
if %pastmonthmonth%==0 (
set /a pastmonthyear-=1
set /a pastmonthmonth=12
)
set monthlengthvar=0
setlocal EnableDelayedExpansion
set tempmonthlengthvar=0
if %pastmonthday% lss 0 (set tempmonthlengthvar = !days%pastmonthmonth%!)
echo.%tempmonthlengthvar%
pause
for /F "delims=" %%A in (!tempmonthlengthvar!) DO (
endlocal
set "monthlengthvar=%%A"
)
set pastmonthday+=%monthlengthvar%
echo.%pastmonthday%
pause
...
Два отголоски выхода 0 и -7, соответственно. Я не могу понять, почему это так, независимо от того, как я его переработал.
Ваш код способ сложен для тех, кто брались за работу до конца. Создайте более простую версию. Кроме того, объясните, что вы надеялись, в дополнение к тому, что вы на самом деле получили. –