找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 18207|回复: 1

[原创] VBS找出本地磁盘中空的东西并删除它们

[复制链接]
发表于 2014-11-7 17:28:35 | 显示全部楼层 |阅读模式
你是不是在磁盘中建立了很多空的文件或文件夹?
你是不是在搜索它们并删除而在发愁?

有了以下这个小程序就可以帮助你解决!

请将以下代码用记事本保存为SearchAndDelete.vbs 文件! 请(不)注(要)意(说)扩(不)展(会)名哦!
  1. '//////////////////////////////
  2. 'Description:这是一个能够删除本地磁盘中空文件夹和空文件的小程序!
  3. 'Author: Zero
  4. '时间: 2014/11/6
  5. '/////////////////////////////

  6. '/// 主程序部分
  7. Dim objfso, WshShell, ext
  8. Set objfso = WScript.CreateObject("Scripting.Filesystemobject")
  9. Set WshShell = CreateObject("Wscript.Shell")

  10. choices =  "1.删除空的文档" & vbCr & "2.删除空的文件夹" & vbCr  & "3.退出"
  11. prompt =  "日志文档保存在 " & "C:\EmptyDelete.log" & vbCrLf & vbCrLf & "单击是(开始),否(退出)!" & vbCrLf & vbCrLf &_
  12.                   "(c) Zero 2014"


  13. confirm = MsgBox("本小工具将在本地磁盘上搜索空的东西(文件夹和文件)!"  & vbCr & prompt, vbYesNo +vbInformation + vbdefaultbutton1,"欢迎使用!")
  14. If confirm = vbyes Then

  15.         MsgBox "不建议在C盘和D盘使用,错误删除与本作者无关" , vbOKOnly +  vbExclamation ,"提示"

  16.                 
  17.        
  18.        
  19.        
  20.         do
  21.         getchoice = InputBox ("请输入需要处理的事项:" & vbCr & choices)
  22.        
  23.         if isnumeric(getchoice) then
  24.                 exit do
  25.         else
  26.                 msgbox "请输入数字"
  27.         end If
  28.        
  29.         Loop
  30.        
  31.         getchoice = CInt(getchoice)
  32.        
  33.         Select Case getchoice
  34.        
  35.         Case 1: '搜索空文件
  36.        
  37.                 getdrv = InputBox("请输入需要处理的盘符"& "格式如下:  E:","盘符","E")
  38.                 getdrv = getdrv & ":"
  39.                   ext = InputBox("请输入需要搜索的文件扩展名"& "比如:txt","扩展名","txt")
  40.                  
  41.                 logfile = "C:\EmptyDelete.log"
  42.                
  43.                 set logbook = objfso.OpenTextFile(logfile, 8, true)

  44.                 Call CheckDiskFile(getdrv,ext)
  45.        
  46.                 logbook.Close
  47.                
  48.                 WshShell.Popup "检查完毕!" & vbCrLf & "(c) Zero 2014",5, "谢谢使用",vbInformation+vbokOnly
  49.                
  50.         Case 2: '搜索空文件夹
  51.        
  52.         getdrv = InputBox("请输入需要处理的盘符"& "格式如下:  E","盘符","E")
  53.         getdrv = getdrv & ":"
  54.         logfile = "C:\EmptyDelete.log"
  55.         set logbook = objfso.OpenTextFile(logfile, 8, true)

  56.         set drive = objfso.GetDrive(getdrv)

  57.         CheckFolder drive.RootFolder
  58.        
  59.         logbook.Close

  60.                 WshShell.Popup "检查完毕!" & vbCrLf & "(c) Zero 2014",5, "谢谢使用",vbInformation+vbokOnly
  61.                
  62.                
  63.        
  64.         End select

  65.        
  66.                

  67.      Else If confirm  = vbno Then
  68.                 MsgBox "你会回来的!" & vbCrLf & "(c) Zero 2014" , vbOKOnly+ vbError,"提示"
  69.                
  70.                 WScript.Quit
  71.        
  72.                 End If
  73.        
  74.         End If
  75.        
  76.        
  77. '/// 主程序部分结束

  78. '/// /////////////////////////////////////////////检查空文件部分开始////////////////////////
  79.          
  80. Function CheckDiskFile(drv,ext)
  81.         extTemp = ext

  82.         On Error Resume Next
  83.           Dim fso
  84.            Set fso = WScript.CreateObject("Scripting.Filesystemobject")
  85.           
  86.            Set drvRootFiles = fso.GetFolder(drv)
  87.           
  88.            Set files = drvRootFiles.Files
  89.           
  90.                    For Each file In files
  91.           
  92.                           IsEmptyFile file,extTemp
  93.          
  94.                 Next
  95.                
  96.         Set subfoldertemp = fso.GetFolder(drv)
  97.                
  98.         Set subfolders = subfoldertemp.SubFolders
  99.                
  100.         For Each subfolder In subfolders
  101.                
  102.         CheckDiskFile subfolder,extTemp '递归
  103.                
  104.                 Next
  105.           
  106.        
  107. End Function

  108. '/// 测试是否为空文件
  109. Sub IsEmptyFile(file,ext)

  110.     On  Error Resume Next
  111.    
  112.     Set fso = CreateObject("Scripting.FileSystemObject")

  113.         extFile = fso.GetExtensionName(file)
  114.        
  115.         If file.Size = 0 And extFile = ext  Then
  116.        
  117.         ReportEmpty file

  118.         End If
  119.        
  120.        
  121. End Sub

  122. '/// 写入日志文件
  123. Function  ReportEmpty(file)
  124.     On Error Resume Next

  125.     response = MsgBox("我们在" & vbCr & file.Path & "发现了空文件," &_
  126.                                         "你想删除吗?", vbYesNo + vbDefaultButton1,"提示")
  127.                                        
  128.         If vbyes = response Then
  129.        
  130.                 logbook.WriteLine vbCrLf
  131.                 logbook.WriteLine "[文件:]"
  132.                
  133.                 logbook.WriteLine  file.Path & vbCrlf & " 在 " & Now & " 被删除"
  134.                 objfso.DeleteFile file, True
  135.        

  136.         end If
  137.        
  138. End Function

  139. '/// /////////////////////////////////////////////检查空文件部分结束////////////////////////
  140.        

  141. '/// /////////////////////////////////////////////检查空文件夹部分开始//////////////////////

  142. sub CheckFolder(folderobj)

  143.         on error resume Next

  144.         isEmptyFolder folderobj

  145.         for each subfolder in folderobj.subfolders

  146.         CheckFolder subfolder
  147.        
  148.                 Next

  149. end Sub

  150. sub isEmptyFolder(folderobj)

  151. on error resume Next

  152. if folderobj.Size=0 and err.Number=0 then

  153.         if folderobj.subfolders.Count=0 Then

  154.         ReportEmptyFolder folderobj

  155.         end If
  156.        
  157. end If

  158. end Sub



  159. sub ReportEmptyFolder(folderobj)

  160. on error resume next

  161. lastaccessed = folderobj.DateLastAccessed

  162. on error goto 0

  163. response = MsgBox("我们在:" & vbCr _
  164. & folderobj.path & vbCr & "发现了空文件夹 " & "文件夹最后访问时间:" _
  165. & vbCr & lastaccessed & vbCr _
  166. & "你想删除这个文件夹么?", _
  167. vbYesNoCancel + vbDefaultButton2)

  168. if response = vbYes Then

  169.        
  170.         logbook.WriteLine "[文件夹:]"
  171.        
  172.        
  173.         logbook.WriteLine  folderobj.path & vbCrlf & " 在 " & Now & " 被删除"


  174.         folderobj.delete

  175. elseif response=vbCancel Then

  176.         MsgBox "你选择了退出!谢谢使用" & vbCrLf & "(c) Zero 2014"
  177.        
  178. WScript.Quit

  179. end If

  180. end Sub

  181. '/// /////////////////////////////////////////////检查空文件夹部分结束//////////////////////
复制代码
欢迎大虾给我指出bugs! 谢谢!
发表于 2014-11-21 21:02:18 | 显示全部楼层
本帖最后由 shelluserwlb 于 2014-11-21 21:18 编辑

为了阅读程序方便,建议多加些注释以节省看代码和研究代码的时间。
复杂的程序一定要有大量的注释。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 01:11 , Processed in 0.016786 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表