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

Batch file 如何将一个变量的值连接到批处理文件中另一个变量的名称中?,batch-file,concatenation,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 pa

因此,我一直在编写一个批处理文件,它在经常清理旧条目的同时备份某个文件。我遇到了这样一个问题,即为了计算目的存储月份长度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。不管我怎么修改,我都不明白为什么会这样。

有些错误被遗忘了/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%

你的代码对于任何人来说都是非常复杂的。创建一个更简单的版本。此外,请解释除了实际得到的结果之外,您希望得到的结果。谢谢,在相应地编辑我的代码后,它将按预期运行!