如何用VBScript不提取文件读取.zip内容并将文件名输出到CSV?
VBScript处理ZIP文件:保存文件名到CSV及免提取读取内容
一、修改代码将文件名保存到CSV文件
原代码仅输出文件名,要写入CSV需借助FileSystemObject实现文件操作,同时要处理文件名中的特殊字符(比如逗号)避免破坏CSV格式。修改后的代码如下:
Dim objSA, objSource, item, objFSO, objFile Dim pathToZipFile, outputCsvPath ' 替换为你的ZIP文件路径和CSV输出路径 pathToZipFile = "C:\your\path\file.zip" outputCsvPath = "C:\your\path\zip_files.csv" Set objSA = CreateObject("Shell.Application") Set objSource = objSA.NameSpace(pathToZipFile).Items() ' 创建文件系统对象用于写入CSV Set objFSO = CreateObject("Scripting.FileSystemObject") ' 第三个参数设为True,输出UTF-8编码避免中文乱码 Set objFile = objFSO.CreateTextFile(outputCsvPath, True, True) ' 写入CSV表头 objFile.WriteLine """文件名""" ' 循环写入每个文件名,用双引号包裹处理特殊字符 For Each item in objSource objFile.WriteLine """" & item.Name & """" Next ' 释放资源 objFile.Close Set objFile = Nothing Set objFSO = Nothing Set objSource = Nothing Set objSA = Nothing WScript.Echo "已成功保存文件名到 " & outputCsvPath
二、不提取文件读取ZIP内容的原理
你当前使用的Shell.Application是Windows Shell内置的接口,它能把ZIP文件当作虚拟文件夹直接访问,无需实际解压:
- Windows Shell原生支持ZIP格式解析,会自动读取ZIP的目录结构
- 通过
objSA.NameSpace(pathToZipFile)获取这个虚拟文件夹对象 - 调用
Items()方法就能获取ZIP内所有文件、子文件夹的集合
除了文件名,还能读取文件的大小、修改时间等属性,示例代码:
Dim objSA, objSource, item, objZipFolder Dim pathToZipFile pathToZipFile = "C:\your\path\file.zip" Set objSA = CreateObject("Shell.Application") Set objZipFolder = objSA.NameSpace(pathToZipFile) Set objSource = objZipFolder.Items() For Each item in objSource WScript.Echo "文件名: " & item.Name WScript.Echo "文件大小: " & objZipFolder.GetDetailsOf(item, 1) & " 字节" WScript.Echo "修改时间: " & objZipFolder.GetDetailsOf(item, 3) WScript.Echo "-------------------------" Next
GetDetailsOf方法的第二个参数是属性索引,常用索引:
- 1:文件大小
- 3:修改日期
- 4:创建日期
- 11:文件类型
内容的提问来源于stack exchange,提问作者Heather
相关产品推荐
相关产品推荐

