close
關於DOS(windows)下取得系統日期的方法:
  在這個日期格式下:”2004-11-25 星期四”, 這個%DATE:~0,10%得到的是2004-11-25

方法1:
說明:DATE為系統變數,“:”表示開始處理前面的字串“~0,10”表示從第0個字元開始取10個字元。
  有些類似Oracle下的SUBSTR()函數,對吧?
  問題解決,在Windows下編寫Shell Script很有用的,特別想自動備份資料時。


Ex: echo %date:~0,4%%date:~5,2%%date:~8,2%

Ex: 自動按照日期建立資料夾
rem 設定資料夾名稱變數(依照日期建立資料夾)
set dir_name=%date:~0,4%%date:~5,2%%date:~8,2%   

rem 建立資料夾
md %dir_name%     

如果要做日期的加減運算,就必須要使用third party tool來達到目的,目前有國外的程式好手寫了一之Python的程式pyfdate(http://www.ferg.org/pyfdate/index.html),有興趣的可以上去研究一下。


方法2:
把以下程式碼 copy 到一個.bat檔裡:

    echo wscript.echo dateadd("d",-1,date) >%tmp%\tmp.vbs
    for /f "tokens=1,2,3 delims=/- " %%i in ('cscript /nologo %tmp%\tmp.vbs') do set y=%%i
    for /f "tokens=1,2,3 delims=/- " %%i in ('cscript /nologo %tmp%\tmp.vbs') do set m=%%j
    for /f "tokens=1,2,3 delims=/- " %%i in ('cscript /nologo %tmp%\tmp.vbs') do set d=%%k
    if %m% LSS 9 set m=0%m%
    if %d% LSS 9 set d=0%d%

然後 %y%、%m%、%d% 就可以分別呼叫出一天前的年、月、日了
第一行的 dateadd("d",-1,date) 的 -1 如果改成 -2,就是二天前,依此類推

舉例來說,如果想要 copy 檔案到其它地方放,就可以在 .bat 檔接著寫:
copy c:\log\*.log d:\log\%y%%m%%d%\

然後排程每天凌晨 00:01 分執行這個.bat檔,假設 2008年5月8號00:01 執行的話
就會把 *.log 檔都 copy 到d:\log\2008\200805\20080507\下面
當然,也可以用 move 的,或是要先壓縮再備份,都可以自行運用

若第一行的 dateadd("d",-1,date) 改成 dateadd("m",-1,date),則取一個月前的日期
改成 dateadd("m",-2,date),則是取二個月前
所以我都拿來改成自動刪除半年前的資料,一樣可以自行運用

不過我記得好像哪個版本的 Windows,因為 date 的格式不一樣,所以 tokens 那裡要改
(可能是把 1,2,3 改成 2,3,4),所以設定之前記得測試一下喔

當然這是窮人版的做法,網路上可能有一大堆的備份軟體都可以做到
因為我個人不喜歡在系統上灌有的沒的,用愈簡單的方式來做,可能問題會愈少一點

補充說明,如果只要擷取當天的日期,語法就更精簡,第一行和最後二行都不需要,如:

    for /f "tokens=1,2,3 delims=/- " %%i in ("%date%") do set y=%%i
    for /f "tokens=1,2,3 delims=/- " %%i in ("%date%") do set m=%%j
    for /f "tokens=1,2,3 delims=/- " %%i in ("%date%") do set d=%%k

其實只要看懂上面程式碼在幹嘛,還可以改的更精簡:

    for /f "tokens=1,2,3 delims=/- " %%i in ("%date%") do set dd=%%i%%j%%k

這樣用%dd%直接叫出年月日,總之就是自行視狀況彈性修改囉~
arrow
arrow
    全站熱搜

    噗噗噗的潛水珽 發表在 痞客邦 留言(0) 人氣()