PowerShell自动删除过期数据
通常我們在對數據備份的時候,只需要對當天的備份數據進行保留,其他的數據都不需要保留,這時候就可以通過PowerShell腳本自動將過期數據刪除。
例:在F:\dbbackup目錄下每天2:00都會自動產生一個以當前日期為名的文件,如“db_20120906.bak?、db_20121216.bak”,只需要對當天數據進行保留,其他全部刪除。
該腳本在每天的5:00執行,編寫思路如下:
1、?檢查當天的備份文件是否已生成,如未生成,則退出
2、?將當天產生的文件屬性設置為隱藏,然后刪除該目錄下的文件(設置為隱藏的文件不會被刪除)
3、?刪除該目錄下的所有文件
4、?將當天產生的文件的隱藏屬性刪除
具體步驟如下:
1、?使用Test-Path命令判斷某個文件是否存在,例如:
?
如果該文件存在,則返回值為“True”,否則返回值為“False”。
如果要判斷當天的文件是否存在,則需要先對其文件名進行構造,該文件名稱可以分為“當前路徑”和“文件名”兩部分,文件名又可以分為“db_”+“當前日期”+“.bak”三部分,現在的關鍵就是如何取出當前日期
使用Get-Date命令可以取出當前時間,如下:
?
但我們只需要年、月、日,并且還必須是字符串類型的。則需要先分別取出年、月、日,然后再構造當前日期,可以使用Get-Date中的Year、Month和Day屬性,命令如下:
?
當前日期則可以寫為:
(Get-Date).Year?+??(Get-Date).Month?+?(Get-Date).Day
再接著看,如果當前月份小于10月,或者當前日期小于10日,則(Get-Date).Month?和(Get-Date).Day的結果如下:
?
而自動生成的文件名稱中的月份和日期都是兩位數構成,如09、06等。這時候就又有問題了,還需要對月份和日期進行判斷,如果小于10,則前面自動補0,命令如下:
| If((Get-date).Month?-lt?10) {$month?=?"0"?+?(Get-date).Month} Else {$month?=?(Get-date).Month}? ? If((Get-date).Day?-lt?10) {$day?=?"0"?+?(Get-date).Day} Else ??{$day?=?(Get-date).Day} |
當前日期則寫為:
(Get-date).Year?+?$month?+?$day
其實在PowerShell中,可以通過UFormat?參數以UNIX格式顯示日期和時間,如下:
?
這樣一來,則不需要再關心當前月份是否小于10,當前日期是否小于10的問題了。
2、?設置當前文件屬性為隱藏,在此可以使用批處理命令,如下:
attrib?F:\dbbackup\db_20121216.bak?+h
注:批處理命令可以在PowerShell中直接運行。
3、?使用Remove-Item命令刪除文件,如下:
Remove-Item?F:\dbbackup\db_20121216.bak
完整的腳本命令如下:
| #構造文件名 $path?=?"F:\dbbackup\" $date?=?get-date?-uformat?"%Y%m%d" $file?=$path?+?"db_"?+?$date?+?".bak" $file ? #測試文件是否存在 $result=test-path?-path?$file If?($result?-eq?"True") {attrib?$file?+h ?Remove-Item?F:\dbbackup\* ?attrib?$file?-h } |
?
總結
以上是生活随笔為你收集整理的PowerShell自动删除过期数据的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 限制CheckBoxList控件只能单选
- 下一篇: 安装mysql5.5时常见错误--缺失m