• 如何用批次指令取得上個月的月份

    2008-10-21

    版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
    http://www.blogbus.com/jdev-logs/30478674.html

    同事問了個問題:他的系統每天會建一個以月份為名的資料夾(如C:\Data\200809、C:\Data\200810等),裡面會放該月每天產生的系統檔案,如何用批次檔把上個月的每個資料夾裡的檔案都刪掉?如果寫支程式(如PowerShell)來做是很簡單,不過卻限制必須使用批次檔來做,這就有點難度了,因為Windows的批次指令實在陽春得可以。

    最後測試出來的關鍵解決方法是使用 SET /A,/A 可以做數值運算(arithmetic)。

    rem 把日期裡的斜線拿掉;2008/10/21→20081021
    set Today=%DATE:/=%

    rem 取回今天的年度月份;200810
    set ThisMonth=%Today:~0,6%

    rem 本月份減1取得上個月份
    set /A LastMonth=%ThisMonth%-1

    關鍵點解決了,剩下的就簡單了。


    2008/10/23 修訂

    有讀者反應若是一月份時程式會有錯,另外一月到九月是一個位數的月份,也要將之補成01~09的兩位數,因而補充以下的修訂版供參考。

    @echo off
    rem 把日期裡的斜線拿掉;2008/10/21→20081021
    set Today=%DATE:/=%

    set ThisYear=%Today:~0,4%

    rem 取回今天的年度月份;200810
    set ThisMonth=%Today:~4,2%

    rem 本月份減1取得上個月份
    set /A LastMonth=%ThisMonth%-1

    rem 如果是1月份的話,要把年度減1
    if "%LastMonth%"=="0" set /A ThisYear=%ThisYear%-1
    if "%LastMonth%"=="0" set LastMonth=01

    rem 如果是1月到9月時,左補零成為01~09
    if "%LastMonth:~1,1%"=="" set LastMonth=0%LastMonth%

    echo Year=%ThisYear%
    echo Month=%LastMonth%

    ##

    分享到: