[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[原创] 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快太多了

我就看看大佬发高性能代码,不敢说话  

TOP

有没有效率更高的遍历方法呢?要是能把所有文件列举出来的

TOP

回复 4# jyswjjgdwtdtj


    随便换个编译型语言效率就可以薄纱vbs

TOP

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

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

评分人数

TOP

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

我就没有这些烦恼(逃

TOP

抄了个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)"
复制代码

TOP

返回列表