标题: [原创] 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- begin_time = Timer
- set fso= createobject("scripting.filesystemobject")
- foldername="C:\Program Files (x86)"
- set nowfolder=fso.getfolder(foldername)
- filetree nowfolder
- sub filetree(fdobject)
- set files=fdobject.files
- set folders=fdobject.subfolders
- for each file in files
- wscript.echo file.path
- next
- for each folder in folders
- wscript.echo folder.path
- filetree folder
- next
- end sub
- wscript.echo Timer-begin_time
复制代码
消耗22.0625秒(更少一些)
2.shell- begin_time = Timer、
- set shell= createobject("shell.application")
- foldername="C:\Program Files (x86)"
- set nowfolder=shell.namespace(foldername)
- filetree nowfolder
- sub filetree(fdobject)
- set items=fdobject.items
- for each item in items
- if item.isfolder then
- wscript.echo item.path
- filetree item.getfolder
- else
- wscript.echo file.path
- end if
- next
- end sub
- 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的- Sub filetree(strFolder)
- Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
- Set FileList = objWMIService.ExecQuery("ASSOCIATORS OF {Win32_Directory.Name='" & strFolder & "'} Where ResultClass = CIM_DataFile")
- For Each objFile In FileList
- WScript.Echo objFile.name
- Next
- Set FolderList = objWMIService.ExecQuery("Associators of {Win32_Directory.Name='" & strFolder & "'}Where AssocClass = Win32_Subdirectory resultRole = PartComponent")
- For Each objFolder In FolderList
- filetree objFolder.name
- Next
- End Sub
- filetree "C:\Program Files (x86)"
复制代码
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |