批处理bat计算前N个月第一天的日期

【方案一】BAT + date.exe(GNU)

 


 @echo off

rem 调用GNU for Win32的date.exe

set "gnuDate=C:/test/date.exe"

rem 指定月数

set MonthsAgo=1

for /f %%a in ('%gnuDate% -d "%MonthsAgo% months ago" "+%%Y-%%m-01"') do (

    set "DstDate=%%a"

    )

)

echo,%DstDate%

pause

 

【方案二】BAT + VBS


@echo off

rem 指定月数

set MonthsAgo=2

>"%temp%/DateCalculate.vbs" echo strLastDate=DateAdd("m", -%MonthsAgo%, Date)

>>"%temp%/DateCalculate.vbs" echo strFmtDate=Right(Year(strLastDate),4) ^& Right("0" ^& Month(strLastDate),2) ^& "01"

>>"%temp%/DateCalculate.vbs" echo WScript.Echo strFmtDate

for /f %%a in ('cscript /nologo "%temp%/DateCalculate.vbs"') do (

    set "DstDate=%%a"

)

set DstDate=%DstDate:~0,4%-%DstDate:~4,2%-%DstDate:~6,2%

echo,%DstDate%

pause