返回列表 发帖

[原创] 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_timeCOPY
消耗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_timeCOPY
消耗12.64秒(如果用“滤镜”的话估计还能快)


显然,shell快太多了
你好

我就看看大佬发高性能代码,不敢说话  
[url=][/url]

TOP

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

TOP

回复 4# jyswjjgdwtdtj


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

TOP

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

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

评分人数

[url=][/url]

TOP

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

我就没有这些烦恼(逃
[url=][/url]

TOP

抄了个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)"COPY
你好

TOP

返回列表