2014-02-21 25 views
1

所以我一直在編寫一個批處理文件,它可以在每隔一段時間清理舊條目的情況下備份某個文件。我遇到了一個問題,它將存儲月份長度(用於計算目的)(天1,天2,天3等)更簡單和更具可讀性,並通過將單詞天與級別存儲月的變量(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

了一些錯誤(set遺忘/a,報價等)

@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

相關問題