2014-02-21 4 views
1

Итак, я пишу командный файл, который создает резервные копии определенного файла, при этом очищая старые записи так часто. Я столкнулся с проблемой, когда было бы проще и удобочитаемо хранить месячные длины (для целей расчета) (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, соответственно. Я не могу понять, почему это так, независимо от того, как я его переработал.

+0

Ваш код способ сложен для тех, кто брались за работу до конца. Создайте более простую версию. Кроме того, объясните, что вы надеялись, в дополнение к тому, что вы на самом деле получили. –

ответ

0

некоторые ошибки (забыли /a в set, цитаты и т.д.)

@ECHO OFF &SETLOCAL disableDelayedExpansion 
SET /a days1=31 
set /a days2=28 
set /a days3=31 
set /a days4=30 
set /a days5=31 

set /a pastmonthday=22-28 
set /a pastmonthmonth=2 
set /a pastmonthyear=2014 

if %pastmonthday% lss 0 (
    set /a pastmonthmonth-=1 
    set /a pastmonthprevmon=1 
) 
if %pastmonthmonth% equ 0 (
    set /a pastmonthyear-=1 
    set /a pastmonthmonth=12 
) 

set /a monthlengthvar=0 
setlocal EnableDelayedExpansion 
set /a tempmonthlengthvar=0 
if %pastmonthday% lss 0 SET /a tempmonthlengthvar=!days%pastmonthmonth%! 
ECHO(%tempmonthlengthvar% 

for /F "delims=" %%A in ("%tempmonthlengthvar%") DO (
    IF "!"=="" endlocal 
    set /a monthlengthvar=%%A 
) 
set /a pastmonthday+=monthlengthvar 
ECHO(%pastmonthday% 
+0

Спасибо, отредактировав мой код соответственно, он работает так, как предполагалось! – Kai

Смежные вопросы