在 Windows 下用命令解压缩 ZIP 文件夹

姚栋想要知道 如何在 Windows 中使用命令解压缩 ZIP 文件夹。他表示如果要用 .NET Framework 提供的 API,则需要 4.5,但环境要求 4.0;如果用 PowerShell Expand-Archive 命令,则需要 5.1,但环境只允许 2.0;想用 cmd,但不知道怎么做。然而应该时刻记住:Windows 自带的 GUI 实际上经常是 COM 的图形版,在 COM 中寻找几乎总是可以找到你想要的图形操作的命令版本。

免责 本文的代码没有任何明示或暗示的保证,本文的代码在公有领域。

实际上,自从 Windows XP 以来,Windows 的文件资源管理器(前称“资源管理器”)就支持解压缩 ZIP 文件夹。我们用 PowerShell 2.0 演示如何使用它。

假设我们想要解压缩 X:\Path\To\Zip.zipY:\Path\To\Extracted,根据 MSDN 上的这篇文档,只要使用 Folder.CopyHere 方法即可,那么在 PowerShell 2.0 中:

$shell = New-Object -ComObject Shell.Application -Strict:$false
$target = $shell.NameSpace('Y:\Path\To\Extracted')
$target.CopyHere('X:\Path\To\Zip.zip\*')

值得注意的是,即使你在第二个(可选)参数里要求“对确认对话框总是回答‘全都是’”,对话框在 Windows 10 仍然可能出现,因此安全的、强硬的方法是:

$tempFolder = [System.Guid]::NewGuid().ToString('n')
$tempFolder = [System.IO.Path]::Combine([System.IO.Path]::GetTempPath(), $tempFolder)
New-Item $tempFolder -ItemType Directory
# 交互式控制台里 Strict 默认是关,执行脚本文件时默认是开
$shell = New-Object -ComObject Shell.Application -Strict:$false
$target = $shell.NameSpace($tempFolder)
$target.CopyHere('X:\Path\To\Zip.zip\*')
# 然后,从 $tempFolder 复制文件

你也可以使用 VBA、C++、C# 等方式访问 COM。

请启用 JavaScript 来查看由 Disqus 驱动的评论。