PowerShell无需解压读取zip内容生成含创建时间的目录列表
PowerShell免解压读取ZIP内文件时间并筛选方案
PowerShell完全可以实现该需求,无需解压完整压缩包,仅读取ZIP文件的头部元数据即可完成时间筛选和目录导出,是Windows环境下的最优方案之一。
环境要求
- PowerShell 5.1及以上版本(Windows 10/11默认预装版本均可满足)
- 仅适配标准ZIP格式,分卷、加密ZIP可通过补充参数适配,RAR/7z等其他格式需额外调用对应命令行工具
完整执行脚本
# 自定义配置项 $zipStoreDir = "C:\你的ZIP压缩包存放目录" # 替换为你的ZIP包所在文件夹路径 $filterStartTime = Get-Date "2024-01-01" # 替换为你要筛选的起始日期 $outputPath = "C:\筛选结果导出.csv" # 替换为结果文件的保存路径 # 加载.NET压缩类库 Add-Type -AssemblyName System.IO.Compression.FileSystem # 遍历所有ZIP文件读取元数据 $allZipFiles = Get-ChildItem -Path $zipStoreDir -Filter *.zip -Recurse $filterResult = foreach ($zipFile in $allZipFiles) { $zipHandle = [System.IO.Compression.ZipFile]::OpenRead($zipFile.FullName) foreach ($entry in $zipHandle.Entries) { # 跳过目录项仅保留文件 if (-not $entry.FullName.EndsWith('/')) { # 转换为本地时区时间 $localTime = $entry.LastWriteTime.UtcDateTime.ToLocalTime() # 按指定日期筛选 if ($localTime -ge $filterStartTime) { [PSCustomObject]@{ 压缩包路径 = $zipFile.FullName 文件在压缩包内路径 = $entry.FullName 文件大小 = $entry.Length 文件创建时间 = $localTime } } } } $zipHandle.Dispose() } # 导出结果为CSV文件 $filterResult | Export-Csv -Path $outputPath -Encoding UTF8 -NoTypeInformation
注意事项
- 标准ZIP格式原生存储的是文件最后修改时间,绝大多数压缩工具打包时会将源文件的创建时间映射写入该字段,可直接作为创建时间使用。如果你的压缩包保留了NTFS扩展属性,可额外读取扩展属性中的独立创建时间字段。
- 脚本仅读取ZIP元数据,处理效率和压缩包内文件数量挂钩,和压缩包总大小无关,不会占用额外磁盘空间存储解压文件。
- 若需要处理RAR、7z等非ZIP格式,可安装对应压缩工具后调用其命令行的列表功能解析结果,同样不需要解压。
内容的提问来源于stack exchange,提问作者JohnnySemicolon
相关产品推荐
相关产品推荐

