Board logo

标题: [原创] VBS脚本fso shell文件处理效率对比 [打印本页]

作者: jyswjjgdwtdtj    时间: 2023-3-2 21:23     标题: VBS脚本fso shell文件处理效率对比

本帖最后由 jyswjjgdwtdtj 于 2023-5-6 21:54 编辑

同样遍历‪C:\Program Files (x86)
并生成html文档
1、fso
  1. begin_time = Timer
  2. set fso= createobject("scripting.filesystemobject")
  3. foldername="‪C:\Program Files (x86)"
  4. set nowfolder=fso.getfolder(foldername)
  5. filetree nowfolder
  6. sub filetree(fdobject)
  7. set files=fdobject.files
  8. set folders=fdobject.subfolders
  9. for each file in files
  10. wscript.echo file.path
  11. next
  12. for each folder in folders
  13. wscript.echo folder.path
  14. filetree folder
  15. next
  16. end sub
  17. wscript.echo Timer-begin_time
复制代码
消耗22.0625秒(更少一些)


2.shell
  1. begin_time = Timer、
  2. set shell= createobject("shell.application")
  3. foldername=‪"C:\Program Files (x86)"
  4. set nowfolder=shell.namespace(foldername)
  5. filetree nowfolder
  6. sub filetree(fdobject)
  7. set items=fdobject.items
  8. for each item in items
  9. if item.isfolder then
  10. wscript.echo item.path
  11. filetree item.getfolder
  12. else
  13. wscript.echo file.path
  14. end if
  15. next
  16. end sub
  17. wscript.echo Timer-begin_time
复制代码
消耗12.64秒(如果用“滤镜”的话估计还能快)


显然,shell快太多了
作者: 523066680    时间: 2023-3-2 21:38

我就看看大佬发高性能代码,不敢说话  
作者: jyswjjgdwtdtj    时间: 2023-3-2 21:56

有没有效率更高的遍历方法呢?要是能把所有文件列举出来的
作者: 老刘1号    时间: 2023-3-2 23:04

回复 4# jyswjjgdwtdtj


    随便换个编译型语言效率就可以薄纱vbs
作者: 523066680    时间: 2023-3-2 23:08

本帖最后由 523066680 于 2023-3-2 23:19 编辑

使用 dir /s /b 重定向导出(或者管道?)然后用文本处理的方式去转换非常高效
用 cmd /U /C dir /s /b  还能获得Unicode编码的文件清单,完美。
作者: 523066680    时间: 2023-3-3 20:00

本帖最后由 523066680 于 2023-3-3 20:47 编辑

我就没有这些烦恼(逃
作者: jyswjjgdwtdtj    时间: 2023-5-6 21:56

抄了个wmi的
  1. Sub filetree(strFolder)
  2. Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
  3. Set FileList = objWMIService.ExecQuery("ASSOCIATORS OF {Win32_Directory.Name='" & strFolder & "'} Where ResultClass = CIM_DataFile")
  4. For Each objFile In FileList
  5. WScript.Echo objFile.name
  6. Next
  7. Set FolderList = objWMIService.ExecQuery("Associators of {Win32_Directory.Name='" & strFolder & "'}Where AssocClass = Win32_Subdirectory resultRole = PartComponent")
  8. For Each objFolder In FolderList
  9. filetree objFolder.name
  10. Next
  11. End Sub
  12. filetree "C:\Program Files (x86)"
复制代码





欢迎光临 批处理之家 (http://bathome.net./) Powered by Discuz! 7.2