powershell - 在Powershell中读取ZIP中的文本文件

标签 powershell zip

我想读取存储在ZIP文件中的文本文件。
目前,我使用7Zip提取所需文件,将其读取并再次删除。
有没有一种方法可以读取它们而不将其提取到硬盘上?

最佳答案

tl; dr

是的,有一种方法。 ,但是有一个不错的方法吗? 不,绝对不是。

有一种方法。但这在很大程度上取决于您的操作系统。 PowerShell 5具有 Expand-Archive ,这使使用7Zip成为过时的方式,但是即使使用 Expand-Archive ,您也必须提取整个存档以读取文件的内容。

使用Windows机器,您可以使用shell.application Com Object或 system.io.compression.filesystem 来完成此任务,如该线程中引用的那样:
How to read contents of a csv file inside zip file using PowerShell:

4. And one more way using native means:

Add-Type -assembly "system.io.compression.filesystem"
$zip = [io.compression.zipfile]::OpenRead("e:\E.zip")
$file = $zip.Entries | where-object { $_.Name -eq "XMLSchema1.xsd"}
$stream = $file.Open()

$reader = New-Object IO.StreamReader($stream)
$text = $reader.ReadToEnd()
$text

$reader.Close()
$stream.Close()
$zip.Dispose()

XMLSchema1.xsd是文件名所在的位置。

链接的答案提到了其他一些方式(这些方式大多与外部依赖项和Windows操作系统链接)。它们中的大多数仍至少提取一个文件,但要准确地说:

关于powershell - 在Powershell中读取ZIP中的文本文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45981861/

相关文章:

linux - "zip -m"目录变空不删除

java - 在 Java 中 : How to zip file from byte[] array?

windows - 如何使用 windows azure powershell 获取系统时间

powershell - 在不使用 PowerShell 的情况下在 Nuget 包中嵌套文件

c# - 如何以非提升用户身份从 C# 运行 PowerShell 脚本

linux - 如何创建没有中间目录的zip文件?

macos - 无法通过 macOS 中的 ansible unarchive 模块提取 tar 文件?

powershell - powershell out-file如何消除每行上的多余空间

azure - 如何连接 azure 变量组中的两个变量并将它们分配给一个带单引号的变量

.NET ZIP 库在内存中工作