在批处理文件中获取上个月的第一个日期和最后日期

时间:2015-09-09 10:10:35

标签: windows batch-file command-line cmd

我正在创建一个批处理文件来执行一些exe文件。在那个exe我需要指定上个月的第一个日期(mm / dd / yyyy)和最后一天(mm / dd / yyyy)。

@echo off
start "Testing" "c:\Program Files\app-cmd\bin\admincmd\imagelist -d 08/01/2015 -e 01/09/2015 > c:\test.txt" 

Imagelist 是一个exe文件,我需要在 -d -e 参数中传递值。 我将在计划任务中添加此脚本,因此它将按计划运行。

我不能使用powershell,因为机器是win server 2003。

请告知。

1 个答案:

答案 0 :(得分:3)

您可以尝试使用

@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