你可以试试
@echo off
setlocal enableextensions
call :getLastMonthLimits start end
echo %start% - %end%
goto :eof
:getLastMonthLimits startDateReturnVar endDateReturnVar
setlocal enableextensions disabledelayedexpansion
for %%t in ("%temp%\%~nx0.%random%%random%%random%.rpt") do (
for /f "tokens=4,7" %%a in ('
^>nul makecab /f nul /d RptFileName^="%%~ft" /V0
^& type "%%~ft" ^| find "MakeCAB Report:"
') do (
set /a "jan=1,feb=2,mar=3,apr=4,may=5,jun=6,jul=7,aug=8,sep=9,oct=10,nov=11,dec=12"
set /a "m=(%%a+10) %% 12 + 1", "y=%%b-m/12", "d=30+((m+m/8) %% 2)", "m+=100"
if /i %%a==mar set /a "d=d-2 +(3-y %% 4)/3 -(99-y %% 100)/99 +(399-y %% 400)/399"
set /a "d+=100"
)
) & del "%%~ft"
endlocal & set "%~1=%m:~-2%/01/%y%" & set "%~2=%m:~-2%/%d:~-2%/%y%"
goto :eof
这使用getDate function by carlos 的简化版本以独立于区域设置的格式获取日期(我更喜欢使用robocopy,但它不是2003 年的本地工具)。其余的只是计算月份限制的算术运算。
已编辑对于 robocopy 版本(而不是 makecab 以独立于区域设置的格式检索日期),以防万一有人需要它
@echo off
call :getLastMonthLimits start end
echo %start% - %end%
goto :eof
:getLastMonthLimits startDateReturnVar endDateReturnVar
setlocal enableextensions disabledelayedexpansion
for /f "tokens=1-2 delims=/ " %%a in ('robocopy "|" . /njh ^| find "|"') do (
set /a "m=((1%%b-100)+10) %% 12 + 1", "y=%%a-m/12", "d=30+((m+m/8) %% 2)", "m+=100"
if %%b==03 set /a "d=d-2 +(3-y %% 4)/3 -(99-y %% 100)/99 +(399-y %% 400)/399"
set /a "d+=100"
)
endlocal & set "%~1=%m:~-2%/01/%y%" & set "%~2=%m:~-2%/%d:~-2%/%y%"
goto :eof