当前位置:DOS资源站资料中心VBS脚本 → VBS脚本,删除某些类型文件+磁盘空间报告

VBS脚本,删除某些类型文件+磁盘空间报告

减小字体 增大字体 作者:佚名  来源:本站整理  发布时间:2008-5-2 1:53:00

最近看到有顾客在网吧里看XXX电影,要是被GA,WH,或是多事的记者逮到就麻烦了,虽然不是网吧提供的,但如果他们要拿这个整你,你也没有办法。

于是写了这个脚本,放到服务器上,让客户机开机就启动。如果有什么事情,一执行就把XXX删得干干净净。

这个脚本将检查指定路径(当然可以是根目录)下的所有文件和子文件夹里的所有文件,换句话说,就是不管它隐藏的多深,在多少层目录下,都将被揪出来。

DOS资源站提供 www.cmdos.net
呵呵,下面是脚本代码,使用很简单的,希望能对大家有所帮助。

为了防止大家误删文件,我贴上来的脚本把删除屏蔽掉了,如果你确定需要删除,把脚本的倒数第9行,最前面的单引号去掉就可以了。

Option Explicit
dim ServerPath,onlyone,notfinddel,WorkPath,arrWorwpath,strWorkPath,fso,wsh,WshNetwork,cName,exectime,fnum,donum,totalsize,t1,t2,tm
fnum=0
donum=0
totalsize=0
WorkPath = "F:\|D:\|C:\Download\"   '这里设置需要扫描的路径(绝对路径),使用“|”来分隔多个路径
serverpath = "\\server\log$\"      '在这里设置服务器上的共享文件夹(可写共享),用来存放删除日志
onlyone = "是"                     '设置是否只扫描一次,如果想每次运行都扫描,请改为“否”。
notfinddel = "是"      '如果本次运行没有找到任何要删除的内容,就删除日志文件,(你想每次都保留日志的话,请改为“否”)

If Right(serverpath,1) <> "\" Then serverpath = serverpath&"\"
arrWorwpath = Split(WorkPath,"|")
t1 = timer()
Set WSH = WScript.CreateObject("WScript.Shell")
wsh.run "regsvr32 /s scrrun.dll",0,true
Set fso = CreateObject("Scripting.FileSystemObject")
Set WshNetwork = WScript.CreateObject("WScript.Network")
cName = WshNetwork.ComputerName
exectime = Now()
Dim dicdrv,logfile,logfilepath,Objdrv,drvTotalSize,drvFreeSpace
logfilepath = Replace(ServerPath&cName&".txt",":","-")
If Not fso.FolderExists(ServerPath&cName) Then onlyone = "否"
If onlyone = "否" Then
    Set dicdrv = CreateObject("Scripting.Dictionary")
    Set logfile = fso.OpenTextFile(logfilepath,8,True)
    logfile.WriteBlankLines(1)
    logfile.WriteLine "#####################################################"
    logfile.WriteLine "开始扫描--"&Now()
    logfile.WriteBlankLines(1)
    For Each strWorkPath In arrWorwpath
        If Right(strWorkPath,1) <> "\" Then strWorkPath = strWorkPath&"\"
        scan(strWorkPath)
        If Not dicdrv.Exists(UCase(Left(strWorkPath,1))&"t") Then
            Set Objdrv = fso.GetDrive(fso.GetDriveName(Left(strWorkPath,2)))
            dicdrv.add UCase(Left(strWorkPath,1))&"t",FormatNumber(Objdrv.TotalSize/1048576, 0)
            dicdrv.add UCase(Left(strWorkPath,1))&"f",FormatNumber(Objdrv.FreeSpace/1048576, 0)
        End If
    Next
    t2 = timer()
    tm=cstr(int(( (t2-t1)*10000 )+0.5)/10)
    logfile.WriteBlankLines(1)
    logfile.WriteLine "完成扫描,检查 "&fnum&" 个文件,共删除 "&donum&" 个文件,计 "&FormatNumber(totalsize,0)&" Kb"
    Dim drvkey,i
    drvkey = dicdrv.Keys
    For i = 0 To dicdrv.Count-1 Step 2
        logfile.WriteLine Left(drvkey(i),1)&"盘:总计磁盘空间 "&dicdrv.Item(drvkey(i))&" M ,剩余磁盘空间 "&dicdrv.Item(drvkey(i+1))&" M"
    Next
    logfile.WriteLine "耗时 " & tm & " 毫秒,   "&Now()
    logfile.WriteLine "#####################################################"
    logfile.WriteBlankLines(1)
    logfile.close
    If notfinddel = "是" Then
        If donum = 0 Then fso.DeleteFile logfilepath,True
    End If
    If Not fso.FolderExists(ServerPath&cName) Then fso.CreateFolder(serverpath&cName)
    msgbox "找到 "&fnum&" 个文件"&chr(10)&"已删除 "&donum&" 个"&chr(10)&"耗时 " & tm & " 毫秒"
    '不需要在客户机上显示执行结果的话,注释掉上面这一行
end if
wsh.run "regsvr32 /u /s scrrun.dll",0,true
Set WshNetwork = Nothing
Set wsh=NoThing
Set FSO=NoThing
WScript.quit

Sub scan(strfolder_)
    Dim folder_,files,file,ext,subfolders,subfolder
    'on error resume next
    Set folder_=fso.getfolder(strfolder_)
    Set files=folder_.files
    For Each file In files
        fnum = fnum+1
        ext=fso.GetExtensionName(file)
        ext=lcase(ext)
        Select Case ext
        Case "rm","rmvb","mpg","wmv","mpeg","3gp","mp4"    '这里是你要删除的文件类型,当然也可以是如"td","pdown"等垃圾文件
            doit(file)
        End Select
    Next
    set subfolders=folder_.subfolders
    For Each subfolder In subfolders
        If subfolder.name <> "System Volume Information" And subfolder.name <> "RECYCLER" Then
            scan(subfolder)
        End If
    Next
End Sub

Sub doit(file)
    Dim strtemp,lngsize,strsizeV
    strtemp = file.path
    lngsize = clng(file.size/1024)
    donum=donum+1
    totalsize = totalsize + lngsize
    'fso.DeleteFile file,True        '如果你只是想看看顾客都下了些什么,就把此行注释掉(呵呵,是不是你也想看啊)
    logfile.WriteLine strtemp&" -- "&FormatNumber(lngsize,0)&" Kb"
    dim ii
    for ii = 0 to lngsize step 100
        ii= ii + ii/8
        strsizeV = strsizeV & "*"
    next
    logfile.WriteLine "---"&strsizeV
end Sub