使用vbs腳本定時(shí)刪除n天前的文件

字號:


    腳本放在定時(shí)任務(wù)里代替服務(wù)定時(shí)執(zhí)行一些操作比較方便,下面是實(shí)現(xiàn)刪除文件夾下n天前創(chuàng)建的文件的vbs腳本,在配置文件 delfolderlist.txt 中配置要刪除的文件路徑,only-del-files 下的路徑 是只刪除其下的文件,不刪除其內(nèi)的子目錄的文件。del-folder-files下的路徑 是刪除其內(nèi)文件及其子目錄內(nèi)的文件,子目錄為空時(shí)刪除目錄,刪除的文件list 放在log文件夾內(nèi)。例配置文件delfolder.txt 內(nèi)容如下:
    only-del-files
    e:\code\test
    del-folder-files
    e:\code\subfolder
    腳本內(nèi)容:
    代碼如下:
    option explicit
    dim mfso    '定義文件系統(tǒng)對象
    dim wfso    '定義文件系統(tǒng)對象
    dim filecount '文件計(jì)數(shù)
    dim foldercount '文件夾計(jì)數(shù)
    dim fstream    '定義讀文件流對象
    dim wstream    '定義寫文件流對象
    dim folder    '文件夾對象
    dim rootfolder    '文件夾對象
    dim file    '文件對象
    dim subdirs     '文件夾集合對象
    dim subdir        '文件夾對象
    dim loopfolder    '文件夾對象
    dim dopath    '路徑字符串
    dim delflag
    delflag =0  ' 0: 不刪除子目錄   ,1:刪除子目錄
    dim wsh
    set wsh=wscript.createobject(wscript.shell)'擊活wscript.shell對象
    main()
    sub main()
    dim filename
    filecount = 0
    foldercount = 0
    set mfso = createobject(scripting.filesystemobject)
    set wfso = createobject(scripting.filesystemobject)
    set fstream = mfso.opentextfile(delfolderlist.txt, 1)
    filename=cstr(date)
    filename=filename + _ + replace(cstr(time),:,_)
    set wstream = wfso.createtextfile(log\ & filename & .log, true)
    '循環(huán)讀取一行filelist.txt中的內(nèi)容
    do while true <> fstream.atendofstream
       dopath = fstream.readline
       if dopath = only-del-files then
          delflag =0
       if true <> fstream.atendofstream then
       dopath = fstream.readline
       end if
       end if
       if dopath = del-folder-files then
          delflag =1
       if true <> fstream.atendofstream then
            dopath = fstream.readline
       end if
       end if
       if mfso.folderexists(dopath) then
           if 1 = delflag then ' 刪除子目錄
           set rootfolder=mfso.getfolder(dopath)
           wstream.writeline(rootfolder.path & 下刪除了以下文件:)
           del_file_subfolder rootfolder
           wstream.writeline(rootfolder.path & 下刪除了以下文件夾:)
           del_folderfunc rootfolder
        'del_folderfunc rootfolder
            wstream.writeblanklines(1) 
       else '只刪除文件
         set rootfolder=mfso.getfolder(dopath)
            wstream.writeline(rootfolder.path & 下刪除了以下文件:)
            del_file rootfolder
            wstream.writeblanklines(1)
       end if
       else
            wsh.popup(文件夾“ & dopath &”不存在或路徑錯(cuò)誤)
            wstream.writeline(文件夾“ & dopath &”不存在或路徑錯(cuò)誤)
        end if
    loop
    fstream.close
        
    'wsh.popup(共刪除文件 & filecount & 個(gè)、文件夾 & foldercount & 個(gè))
    end sub
    sub del_file(folder)
        dim df        '標(biāo)記
        for each file in folder.files
            df=datediff(d,file.datecreated,now)
            if (df>1) then '1天前的文件
                wstream.writeline(folder.path & \ & file.name & vbtab & file.datecreated)
                file.delete()
                filecount=filecount+1
            end if
        next
    end sub
    ''刪除文件 同時(shí)刪除subfolder
    sub del_file_subfolder(folder)
        dim df        '標(biāo)記
        for each file in folder.files
            df=datediff(d,file.datecreated,now)
            if (df>1) then
                wstream.writeline(folder.path & \ & file.name & vbtab & file.datecreated)
                file.delete()
                filecount=filecount+1
            end if
        next
        '遞歸調(diào)用del_file函數(shù),實(shí)現(xiàn)子目錄文件的遍歷刪除
        if (0 < folder.subfolders.count ) then
            for each loopfolder in folder.subfolders
            del_file_subfolder loopfolder
            next
        end if
    end sub
    sub del_folderfunc(folder)
        dim loopsub
        dim tmp
        if 0=folder.subfolders.count then    '判斷其下是否還有子文件夾,若無
            if 0=folder.files.count then    '如果其下還有文件則退出(符合條件的文件上一步已刪掉了)
                if ucase(folder.path)<>ucase(dopath) then    '判斷是否為根目錄,是則退出,不是則刪除
                    wstream.writeline(folder.path & vbtab & folder.datecreated)
                    folder.delete
                    foldercount=foldercount+1
                     '' del_folderfunc(mfso.getfolder(delfolderpath))        '刪除該文件夾后從根目錄重新檢查,以檢查其父目錄是否該刪除
                end if
            end if
        else
            for each subdir in folder.subfolders    '還有子文件夾則輪循每一個(gè)子文件夾
                del_folderfunc(subdir)
            next
        end if
    end sub