2008年10月21日

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

同事問了個問題:他的系統每天會建一個以月份為名的資料夾(如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%

##


Posted by emisjerry at 樂多Roodo! │22:23 │回應(1)引用(0)作業系統備忘
樂多分類:網路/3C 共同主題:Programing 工具:編輯本文
Ads by Roodo! 

引用URL

http://cgi.blog.roodo.com/trackback/7418765
回應文章
私密回應
Posted at 2009年06月15日 15:56