根据系统日期为月份和期间分配变量

根据系统日期为月份和期间分配变量

问题描述:

原问题: 我试图将月份和年份值分配给会计年度从4月开始到3月份为止的18个月。我期待批处理选择系统月和年,并将其分配18个月。月份变量应以月份值递增,直到18个月,年份变量值应该从3月份开始递增3月底根据系统日期为月份和期间分配变量

+0

请把原来的问题了。 – lit

这并不难,使用一些模数学和索引编制月份名称缩写列表。我离开了这个机制来获取CUR_MONTH和CUR_YEAR。你可以解析%DATE%,但那会很糟糕。寻找通过WMIC获取当前时间戳的方法。

@echo off 
SETLOCAL ENABLEDELAYEDEXPANSION 

REM Use 0-based month index. 
REM Jan = 0, Feb = 1, ... 

FOR /F "usebackq skip=1" %%a IN (`type NUL ^|WMIC Path Win32_LocalTime Get Month ^| findstr .`) DO (SET /A "CUR_MONTH=%%a - 1") 
FOR /F "usebackq skip=1" %%a IN (`type NUL ^|WMIC Path Win32_LocalTime Get Year ^| findstr .`) DO (SET /A "CUR_YEAR=%%a") 

SET "MONTH_LIST=JanFebMarAprMayJunJulAugSepOctNovDec" 
SET /A "FISCAL_YEAR=%CUR_YEAR%" 

FOR /L %%i IN (0, 1, 17) DO (
    SET /A "MONTH_INDEX=(!CUR_MONTH! + %%i) %% 12" 
    SET /A "MONTH_OFFSET=!MONTH_INDEX! * 3" 

    SET /A "VAR_INDEX=%%i + 1" 
    CALL SET "MONTH!VAR_INDEX!=%%MONTH_LIST:~!MONTH_OFFSET!,3%%" 

    IF !MONTH_INDEX! EQU 3 (SET /A "FISCAL_YEAR=!FISCAL_YEAR! + 1") 
    SET "YEAR!VAR_INDEX!=FY!FISCAL_YEAR:~2,2!" 
) 
SET "MONTH_LIST=" 
SET "MONTH_INDEX=" 
SET "MONTH_OFFSET=" 

SET MONTH 
SET YEAR 

EXIT /B 0 

,输出是:

MONTH1=Aug 
MONTH10=May 
MONTH11=Jun 
MONTH12=Jul 
MONTH13=Aug 
MONTH14=Sep 
MONTH15=Oct 
MONTH16=Nov 
MONTH17=Dec 
MONTH18=Jan 
MONTH2=Sep 
MONTH3=Oct 
MONTH4=Nov 
MONTH5=Dec 
MONTH6=Jan 
MONTH7=Feb 
MONTH8=Mar 
MONTH9=Apr 
YEAR1=FY17 
YEAR10=FY17 
YEAR11=FY17 
YEAR12=FY17 
YEAR13=FY18 
YEAR14=FY18 
YEAR15=FY18 
YEAR16=FY18 
YEAR17=FY18 
YEAR18=FY18 
YEAR2=FY17 
YEAR3=FY17 
YEAR4=FY17 
YEAR5=FY17 
YEAR6=FY17 
YEAR7=FY17 
YEAR8=FY17 
YEAR9=FY17 
+0

我不太清楚你想要什么。问题示例结果显示1月份“年度7 = FY17”的年度变化。如果你想在四月份开始,试试'SET/A“CUR_MONTH = 3”'。 – lit

+0

也许我想清楚你想要什么。你想让FISCAL YEAR成为APR-MAR​​吗?请再次检查结果。 – lit

+0

好的,@ cec4111。我想我已经为你做了一切,这不是我应该做的。 – lit