如何将变量的值连接到批处理文件中的另一个的名称?

时间:2014-02-21 23:52:03

标签: batch-file concatenation

所以我一直在编写一个批处理文件来备份某个文件,同时经常清理旧条目。我遇到了一个问题,它可以更简单,更可读地存储月份长度(用于计算目的)(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。无论我如何重写它,我都无法弄清楚为什么会这样。

1 个答案:

答案 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%