首页 > 编程 > VBScript > 正文

用vbs删除某些类型文件和磁盘空间报告的脚本

2020-06-26 18:12:17
字体:
来源:转载
供稿:网友
为了防止大家误删文件,我贴上来的脚本把删除屏蔽掉了,如果你确定需要删除,把脚本的倒数第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
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表