用vbs刪除前一天創(chuàng)建的備份文件
問(wèn):
您好,腳本專家!有一個(gè)程序每天都會(huì)創(chuàng)建一個(gè)具有類似于以下名稱的文件:backup_20050607.bak。如何才能刪除前一天的文件呢?
-- JC
答:
您好,JC。嗯,可以調(diào)用一個(gè)腳本自動(dòng)刪除前一天產(chǎn)生的任何文件。伙計(jì),就在幾周前我們?cè)眠^(guò)一個(gè)類似這樣的腳本!
是的,我們還有印象。但往事不能重提。
除此之外,我們還要在此寫(xiě)一個(gè)專欄。您需要一個(gè)腳本來(lái)刪除名如 backup_20050607.bak(其中,20050607 表示前一天,在本例中即為 2005 年 6 月 7 日)的文件,對(duì)嗎?您需要做的一切就是使用:
dtmYesterday = Date - 1
strYear = Year(dtmYesterday)
strMonth = Month(dtmYesterday)
If Len(strMonth) = 1 Then
strMonth = "0" & strMonth
End If
strDay = Day(dtmYesterday)
If Len(strDay) = 1 Then
strDay = "0" & strDay
End If
strYesterday = strYear & strMonth & strDay
strFileName = "C:\Backups\backup_" & strYesterday & ".bak"
Set objFSO = CreateObject("Scripting.FileSystemObject")
objFSO.DeleteFile(strFileName)
您可能已經(jīng)料道,這里最為棘手的部分就是構(gòu)建文件名;有了文件名后,刪除文件就是小事一樁了。那么,我們?cè)撊绾螛?gòu)建該文件名呢?
對(duì),文件名中每天都會(huì)發(fā)生變化的那一部分就是表示備份文件生成日期的那個(gè)部分。也就是說(shuō),我們所要做的全部事情就是構(gòu)建文件名的這個(gè)部分,其它部分可以采用硬編碼來(lái)加入。因此,我們需要從確定前一天的日期開(kāi)始,這可通過(guò)將當(dāng)前日期減去一,然后該值存入一個(gè)名為 dtmYesterday 的變量來(lái)完成:
dtmYesterday = Date - 1
接下來(lái),使用 Year 函數(shù)從 dtmYesterday 取得四位數(shù)字的年份值(例如 2005);該值將被存儲(chǔ)在變量 strYear 中。緊接著使用 Month 函數(shù)從 dtmYesterday 取得月份值。
但是請(qǐng)注意,對(duì)于月份值須得另外再進(jìn)行一些編碼(對(duì)于日期也是如此)。為什么呢?是這樣,假定我們所處理的是六月份。此時(shí),Month 函數(shù)將返回值 6。這并沒(méi)有什么問(wèn)題,只不過(guò)在我們的文件名中為月份分配了兩位數(shù)字;需要將月份以 06 形式列出。因此,我們必須確定所得到的月份是一位數(shù)字還是兩位數(shù)字。如果是一位數(shù)字的月份,則必須在數(shù)字前面加零。我們就是象下面這樣做的:
If Len(strMonth) = 1 Then
strMonth = "0" & strMonth
End If
這段代碼真的是一目了然。Len(長(zhǎng)度)函數(shù)會(huì)告訴我們 strMonth 變量中有多少位數(shù)字。如果只有 1 位,則添加前導(dǎo) 0:
strMonth = "0" & strMonth
如果長(zhǎng)度為 1 之外的任何值,則只需保持原樣即可。
取得月份值后,用函數(shù) Day 重復(fù)同一過(guò)程,以便能檢索出日期的天部分。該值將被存儲(chǔ)在巧妙命名的變量 strDay 中。
這樣便提供了我們構(gòu)建文件名所需的全部數(shù)據(jù)。為此,首先要使用下面這行代碼將年月日合在一起(得到類似 20050607 的字符串):
strYesterday = strYear & strMonth & strDay
然后,只需附加其余的路徑信息(在本例中,假定文件存儲(chǔ)在文件夾 C:\Backups 下):
strFileName = "C:\Backups\backup_" & strYesterday & ".bak"
如您所見(jiàn),我們只需將字符串 C:\Backups\backup_、所構(gòu)建的日期 (20050607) 以及 .bak 合并起來(lái)即可。將它們組合在一起之后將會(huì)得到類似下面的結(jié)果:
C:\Backups\backup_20050607.bak
很酷吧。
然后,我們將使用下面這兩行代碼創(chuàng)建一個(gè) FileSystemObject 實(shí)例并刪除文件:
Set objFSO = CreateObject("Scripting.FileSystemObject")
objFSO.DeleteFile(strFileName)
由于使用了 FileSystemObject,由于使用了 FileSystemObject,所以這一腳本只能在本地機(jī)上運(yùn)行。但如果備份文件位于遠(yuǎn)程計(jì)算機(jī)上,該怎么辦呢?沒(méi)問(wèn)題,此時(shí)可以使用 WMI 找到并刪除該文件。那么,為什么不最先就使用 WMI 呢?是這樣,F(xiàn)ileSystemObject 用不了一秒鐘就能找到并刪除文件,而 WMI 所需的時(shí)間則稍長(zhǎng)一些。我們決定以速度和效率為先。
但正如我們所說(shuō)的,如果文件位于遠(yuǎn)程計(jì)算機(jī)上,則速度和效率并不會(huì)給您帶來(lái)太多好處。幸運(yùn)的是,在這種情況下可以使用 WMI 腳本刪除文件。以下腳本(今天暫且不對(duì)其進(jìn)行討論)將從名為 atl-fs-01 的遠(yuǎn)程計(jì)算機(jī)上刪除備份文件:
dtmYesterday = Date - 1
strYear = Year(dtmYesterday)
strMonth = Month(dtmYesterday)
If Len(strMonth) = 1 Then
strMonth = "0" & strMonth
End If
strDay = Day(dtmYesterday)
If Len(strDay) = 1 Then
strDay = "0" & strDay
End If
strYesterday = strYear & strMonth & strDay
strFileName = "C:\\Backups\\backup_" & strYesterday & ".bak"
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colFiles = objWMIService.ExecQuery _
("Select * from CIM_DataFile where Name = '" & strFileName & "'")
For Each objFile in colFiles
objFile.Delete
Next
注意:難道就不能省去這一切麻煩,簡(jiǎn)單地刪除所有創(chuàng)建/修改日期等于前一天日期的文件嗎?可以,只要該文件夾中決不會(huì)存在具有相同日期因而可能會(huì)被意外刪除的任何其他文件就行。綜合考慮各種因素,上述做法似乎是最為安全的。
上一篇:用vbscript把 Word 文檔保存為文本文件的代碼
欄 目:vb
本文標(biāo)題:用vbs刪除前一天創(chuàng)建的備份文件
本文地址:http://mengdiqiu.com.cn/a1/vb/7880.html
您可能感興趣的文章
- 01-10下載文件到本地運(yùn)行的vbs
- 01-10VBS中的正則表達(dá)式的用法大全 <font color=red>原創(chuàng)&
- 01-10VBS中SendKeys的基本應(yīng)用
- 01-10VBScript教程 第十一課深入VBScript
- 01-10用VBSCRIPT控制ONSUBMIT事件
- 01-10VBScript語(yǔ)法速查及實(shí)例說(shuō)明
- 01-10VBS中Select CASE的其它用法
- 01-10VBScript教程 第七課使用條件語(yǔ)句
- 01-10vbscript 可以按引用傳遞參數(shù)嗎?
- 01-10VBScript教程 第二課在HTML頁(yè)面中添加VBscript代碼


閱讀排行
- 1C語(yǔ)言 while語(yǔ)句的用法詳解
- 2java 實(shí)現(xiàn)簡(jiǎn)單圣誕樹(shù)的示例代碼(圣誕
- 3利用C語(yǔ)言實(shí)現(xiàn)“百馬百擔(dān)”問(wèn)題方法
- 4C語(yǔ)言中計(jì)算正弦的相關(guān)函數(shù)總結(jié)
- 5c語(yǔ)言計(jì)算三角形面積代碼
- 6什么是 WSH(腳本宿主)的詳細(xì)解釋
- 7C++ 中隨機(jī)函數(shù)random函數(shù)的使用方法
- 8正則表達(dá)式匹配各種特殊字符
- 9C語(yǔ)言十進(jìn)制轉(zhuǎn)二進(jìn)制代碼實(shí)例
- 10C語(yǔ)言查找數(shù)組里數(shù)字重復(fù)次數(shù)的方法
本欄相關(guān)
- 01-10下載文件到本地運(yùn)行的vbs
- 01-10飄葉千夫指源代碼,又稱qq刷屏器
- 01-10SendKeys參考文檔
- 01-10什么是一個(gè)高效的軟件
- 01-10VBS中的正則表達(dá)式的用法大全 &l
- 01-10exe2swf 工具(Adodb.Stream版)
- 01-10VBS中SendKeys的基本應(yīng)用
- 01-10用VBSCRIPT控制ONSUBMIT事件
- 01-10VBScript教程 第十一課深入VBScript
- 01-10VBScript語(yǔ)法速查及實(shí)例說(shuō)明
隨機(jī)閱讀
- 01-10delphi制作wav文件的方法
- 08-05dedecms(織夢(mèng))副欄目數(shù)量限制代碼修改
- 01-10C#中split用法實(shí)例總結(jié)
- 04-02jquery與jsp,用jquery
- 08-05織夢(mèng)dedecms什么時(shí)候用欄目交叉功能?
- 01-10SublimeText編譯C開(kāi)發(fā)環(huán)境設(shè)置
- 08-05DEDE織夢(mèng)data目錄下的sessions文件夾有什
- 01-10使用C語(yǔ)言求解撲克牌的順子及n個(gè)骰子
- 01-11ajax實(shí)現(xiàn)頁(yè)面的局部加載
- 01-11Mac OSX 打開(kāi)原生自帶讀寫(xiě)NTFS功能(圖文