gpt4 book ai didi

powershell - 如何在Powershell的zip中列出文件?

转载 作者:行者123 更新时间:2023-12-04 02:43:53 24 4
gpt4 key购买 nike

我是PowerShell的新手,正在寻找列出目录中zip文件中包含的所有文件。我不想使用任何第三方工具。

Structure of the directory is
mydir > dir
a.zip
b.zip
c.zip

with each file containing files named 1.txt or 2.txt or 3.txt

I am trying to get an output in the form

a.zip:1.txt
a.zip:2.txt
b.zip:files\3.txt
b.zip:4.txt
c.zip:1.txt
d.zip:10.txt

等等。

不幸的是,我的环境不是4.5,而是4.0。
我能够编写这段代码,但是由于unzip提供了很多额外的信息,它仍然需要大量的解析才能进行清理。
$packagedir="C:\Packages"
$unzipcmd = "c:\bins\unzip.exe -l"
$unmatchstr = "*Archive*"
pushd .
cd $packagedir

$filelist= Get-ChildItem -Recurse | Select-Object -ExpandProperty FullName

foreach ($item in $filelist)
{$ziplist = Invoke-Expression "$unzipcmd $item";
foreach ($item2 in $ziplist)
{
if ($item2.Contains("Archive") )
{

}
else
{
echo $item "::" $item2}}
}
popd

有没有更简单的方法来解析这一点。 unzip -l输出中有很多额外的信息,例如列标题,分隔符和日期以及每个文件名之前的其他日期。

最佳答案

在.NET Framework 4.5中,有一个非常方便的ZipFile类。
要列出存档文件中的条目,可以在Powershell中像这样使用它:

[Reflection.Assembly]::LoadWithPartialName('System.IO.Compression.FileSystem')
[IO.Compression.ZipFile]::OpenRead($sourceFile).Entries

更新:这似乎可以解决问题:]
[Reflection.Assembly]::LoadWithPartialName('System.IO.Compression.FileSystem')

foreach($sourceFile in (Get-ChildItem -filter '*.zip'))
{
[IO.Compression.ZipFile]::OpenRead($sourceFile.FullName).Entries.FullName |
%{ "$sourcefile`:$_" }
}

关于powershell - 如何在Powershell的zip中列出文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14204230/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com