如何使用 PowerShell 扩展 ZIP 存档(UTF-8 文件名)

2024-05-17

我的 zip 存档有一个文件:

Père-Noël.txt

该 zip 可以通过 Windows 文件资源管理器、7-Zip 或我尝试过的任何其他工具很好地扩展。但我不知道如何从 PowerShell 中做到这一点。显然我已经尝试过展开-存档 https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.archive/expand-archive?view=powershell-5.1但它无法处理文件名并将其乱码成PŠre-N”el.txt。注意:问题并非特指此示例,而是任何使用 ASCII-127 范围之外的字符的文件名。或者看起来是这样。

任何使用 PowerShell 且不依赖外部工具(无法保证其存在)的解决方案都将被接受。 Windows 10 是平台。我无法进行系统级更改,也不能依赖脚本的用户在其系统上具有任何特定的全局设置。必须有一个解决方案within剧本。

除了这样还有别的办法吗Expand-Archive?或者 PowerShell 中是否有一个设置可以神奇地实现这一目的?

重现步骤:

在您的 Windows 10 主机上:

  1. 创建一个空文件,名为Père-Noël.txt.

  2. 使用 Windows 资源管理器(“压缩文件夹”功能)将文件 ZIP 到您选择的 ZIP 存档中,例如myarchive.zip.

  3. 删除Père-Noël.txt file.

  4. 现在尝试解压myarchive.zip使用 PowerShell。此操作应该创建文件Père-Noël.txt again.

使用 PowerShell Compress-Archive cmdlet 进行压缩

是的,如果 ZIP 最初是使用Compress-Archivecmdlet 然后它在解压缩时实际上按预期工作Expand-Archive。所以你可以说PowerShell与其自身兼容。它只是与 Windows 资源管理器 ZIP 不兼容。


您可能需要检查编码[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)

希望这可以帮助,

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 PowerShell 扩展 ZIP 存档(UTF-8 文件名) 的相关文章

随机推荐