最近公司的項目,須要部署一個oracle定時備份腳本,刪除掉特定時間前的備份文件。BAT批處理文件結合windows系統(任務計劃程序)windows
正常狀況下咱們的任務計劃會有反饋數值,經過它能夠判斷這個任務計劃上次是否運行正常。oracle
任務計劃程--歷史記錄裏,操做完成,任務完成。可是在任務欄--上次運行結果顯示不是操做成功完成(0x0),而是0x1。函數
經過以上錯誤代碼,去排除調用的函數,發現是腳本文件裏的定義時間機制,與設定任務計劃時間不匹配形成沒法正確運行腳本。spa
我在任務計劃設置的時間是 AM 0:30指針
bat腳本時間設定以下:部署
set var=%date:~0,4%%date:~5,2%%date:~8,2%%time:~0,2%%time:~3,2%%time:~6,2%class
致使腳本沒法正常運行的語句以下:date
%time:~0,2%%time:~3,2%%time:~6,2%file
以下的各個操做的意義以下:
%time:~0,2% 表示從左向右指針向右偏0位,而後從指針偏移到的位置開始提取2位字符,結果是小時字段數值
%time:~3,2% 表示指針從左向右偏移3位,而後從偏移處開始提取2位字符,結果是分鐘字段數值
%time:~6,2% 表示指針從左向右偏移6位,而後從偏移處開始提取2位字符,結果是秒字段數值
//建立時間命名的文件夾程序
md d:\%date:~0,4%%date:~5,2%%date:~8,2%_%time:~0,2%%time:~3,2%%time:~6,2%
用%time:~0,2%%time:~3,2%%time:~6,2%時有個問題, 就是若是TIME 是00點的時候,電腦顯示的是0 不是00因此%time:~0,2%就報錯了。
例子:2019-1-20時間1:26:20
set fileDate=%date:~0,4%%date:~5,2%%date:~8,2%%time:~0,2%%time:~3,2%%time:~6,2%
set fileDate2=%date:~0,4%%date:~5,2%%date:~8,2%%time:~1,1%%time:~3,2%%time:~6,2%
echo fileDate:%fileDate%
echo fileDate2:%fileDate2%
fileDate: 20190120 12620(1前面是空格)
fileDate2: 2019012012620
總結:
1)若是要用%time:~0,2%%time:~3,2%%time:~6,2% (運行腳本的時間必定是在10-23點區間,不然0-9(H)腳本調用函數錯誤,沒法運行)
2)若是要用%time:~1,1%%time:~3,2%%time:~6,2% (建議運行腳本的時間在0-9點這個區間,若是是>9點,
好比13點。會形成只顯示個位數字3,好比2019-1-20 時間13:26:20 會顯示2019012032620 從而影響時間的總體準確性)
3)或者是直接捨去時間,只用日期來定義文件名。
%date:~0,4%%date:~5,2%%date:~8,2%
好比2019-1-20 那麼文件名會顯示爲20190120.(若是需求是天天作一個備份,那麼這樣命名是沒什麼影響的,
若是是一天須要N個備份文件,請參照上面兩種時間設定)