windows 如何使用PowerShell扩展ZIP压缩包(UTF-8文件名)

iaqfqrcu  于 2023-02-13  发布在  Windows
关注(0)|答案(3)|浏览(285)

我的压缩包只有一个文件:

Père-Noël.txt

这个zip文件可以很好的用Windows文件资源管理器、7-Zip或者其他我试过的工具来扩展,但是我不知道如何在PowerShell中扩展,显然我试过Expand-Archive,但是它不能处理文件名,并且会把它变成PŠre-N”el.txt。这个问题并不是这个例子特有的,而是任何使用ASCII-127范围之外的字符的文件名的问题。
任何使用PowerShell且不依赖外部工具(无法保证其存在)的解决方案都将被接受。Windows 10是平台。我不能进行系统级更改,也不能依赖脚本用户在其系统上进行任何特定的全局设置。它必须是脚本 * 内 * 的解决方案。
除了Expand-Archive,还有别的方法吗?或者PowerShell中有没有一个设置可以神奇地完成这个任务?

重现步骤:

在Windows 10主机上:
1.创建名为Père-Noël.txt的空文件。
1.使用Windows资源管理器("压缩文件夹"功能)将文件压缩到您选择的ZIP存档中,例如myarchive.zip
1.删除Père-Noël.txt文件。
1.现在尝试使用PowerShell解压缩myarchive.zip。此操作应再次创建文件Père-Noël.txt

使用PowerShell压缩-存档cmdlet进行压缩

如果ZIP最初是使用Compress-Archive cmdlet创建的,那么在使用Expand-Archive解压缩时,它实际上会按预期工作。因此,您可以说PowerShell与其自身兼容。它只是与Windows资源管理器ZIP不兼容。

d6kp6zgx

d6kp6zgx1#

您可能需要检查编码[System.Text.Encoding]::GetEncodings(),但下面的示例适用于Père-Noël

$zipfile = 'C:\test\Père-Noël.zip' #Contains Père-Noël.txt
$outpath = 'C:\test\out'
$enc = [System.Text.Encoding]::GetEncoding(29001) #29001, x-Europa, Europa
[System.IO.Compression.ZipFile]::ExtractToDirectory($zipfile, $outpath, $enc)

希望这能帮上忙,

js81xvg6

js81xvg62#

尽管我们是在2021年到达这里的,但我还是遇到了同样的问题。和公认的答案一样,我的解决方案也是基于System.IO.Compression命名空间的。expand-archive命令接受pipeline-input和一个-Force开关。我的实现目标也是一样的--仍在工作中,没有经过彻底的测试。

$encoding = [System.Text.Encoding]::GetEncoding(437)
Write-Output $encoding
Get-ChildItem -Path ".\*.zip"  | Unzip -target "C:\unzipped" -f -encoding $encoding -v

Find unzip function here

sr4lhrrt

sr4lhrrt3#

它与公认的答案相似,但我更喜欢这个答案:

[System.IO.Compression.ZipFile]::ExtractToDirectory("$pwd/test.zip", "$pwd", [System.Text.Encoding]::GetEncoding((Get-Culture).TextInfo.OEMCodePage)

source

相关问题