题 如何在Powershell中压缩/解压缩文件?


是否有一个单行程序将在PowerShell中压缩/解压缩文件(* .zip)?


103
2018-06-03 15:57




有关: 在服务器核心中解压缩PS - Ruben Bartelink


答案:


DotNetZip 将允许您从PowerShell执行此操作。它不是单行,但是库允许您编写所需的PowerShell脚本。

您也可以使用COM界面,参见 使用Windows PowerShell压缩文件,然后打包Windows Vista边栏小工具

谷歌搜索“zip powershell”或“解压缩PowerShell”也可能会产生有用的结果。


21
2018-06-03 16:02



+1链接文章具有有用的任务,与最受欢迎的答案不同 - Ruben Bartelink
-1表示建议使用Google搜索。这是Google搜索“unzip powershell”的最高StackExchange结果 - machine yearning


这就是如何在没有任何外部工具的情况下纯粹从Powershell完成的。这会将名为test.zip的文件解压缩到当前工作目录中:

$shell_app=new-object -com shell.application
$filename = "test.zip"
$zip_file = $shell_app.namespace((Get-Location).Path + "\$filename")
$destination = $shell_app.namespace((Get-Location).Path)
$destination.Copyhere($zip_file.items())

154
2017-11-14 01:36



使用$ destination.Copyhere($ zip_file.items(),0x10)覆盖现有文件。 0x4隐藏对话框,0x14组合这些并覆盖并隐藏对话框。 - Peter
这条线 $destination.Copyhere($zip_file.items()) 实际解压缩。 - Jonathan Allen
如果您愿意,可以将上述内容包含在一个函数中: function unzip($filename) { if (!(test-path $filename)) { throw "$filename does not exist" } $shell = new-object -com shell.application $shell.namespace($pwd.path).copyhere($shell.namespace((join-path $pwd $filename)).items()) } - James Holwell
这应该是公认的答案。 - tugberk
当zip文件只包含一个文件夹(项目为空)时,这对我失败了 - James Woolfenden


现在在.NET Framework 4.5中,有一个 ZipFile的 你可以这样使用的类:

[System.Reflection.Assembly]::LoadWithPartialName('System.IO.Compression.FileSystem')
[System.IO.Compression.ZipFile]::ExtractToDirectory($sourceFile, $targetFolder)

56
2017-12-30 17:46



它 无疑 工作 - 我用它来提取超过400个zip文件。我会检查以确保我没有4.5,但它没有出现在Microsoft.NET下。 - GalacticCowboy
这个 将 如果有一个ExtractToDirectory的简单方法和覆盖所有现有文件的选项,那就太好了。 - James Dunne
使用Add-Type加载程序集,例如:Add-Type -AssemblyName System.IO.Compression.FileSystem - Mike
@JamesDunne - 如果你没有其他文件需要保存,可以使用'Remove-Item -Recurse $ TargetFolder'。否则,你想做什么,但这将是非平凡的。您需要打开zip以进行读取,然后遍历zip,删除任何先前的目标对象并解压缩新的目标对象。幸运的是,简单的解决方案有效。 ;) - Mike
请注意,相关文件位置将使用 。净 当前目录, 不 PowerShell之一。看到 这里。它可能更好 (Resolve-Path $someDir).Path 争论。 - jpmc26


您可以查看 PowerShell社区扩展(PSCX) 它有专门用于此的cmdlet。


18
2018-06-03 15:59



+1 PSCX是一组很棒的附加cmdlet - 我希望我可以选择更多我想要的和我不需要的。在我的Powershell实例中似乎正在改变很多...... - marc_s
我遇到过这个问题因为我真的想要自动化PSCX安装,如果我可以为一些同事做的话。现在尝试一下,看看我遇到了什么样的问题 - jcolebrand


我知道这是一个非常古老的问题,但我刚刚看到它在推特上发布,我想发布一个当前的答案。

PowerShell 5,目前可在Windows 10或通过 Windows Management Framework 5生产预览,附带两个内置cmdlet,用于“压缩”和“解压缩”:


14
2017-10-17 20:59



它是一个 好 为旧问题提供新信息的事情。 ;)+1 - jpmc26


我找到了最简单的解决方案,只使用我已经使用多年并在UNIX环境中使用的infozip二进制文件。

PS> zip -9r ../test.zip * 
PS> cd .. 
PS> unzip -t test.zip Archive:  test.zip
    testing: LinqRepository/          OK
    testing: LinqRepository/ApplicationService.cs   OK
    testing: LinqRepository/bin/      OK 
... 
No errors detected in compressed data of test.zip.

在文本输出周围放置一个powershell包装器会很简单,但实际上我从来不需要它,所以我没有打扰。

http://www.info-zip.org/


5
2017-08-03 19:40





我也喜欢 信息-ZIP (在大多数其他Zip实用程序中找到的Zip引擎)和 的7-Zip,另一个既有GUI又有命令行Zip实用程序的最爱。关键是,有一些很好的命令行实用程序可以用于大多数PowerShell任务。

运行没有使用PowerShell构建的命令行实用程序有一些技巧:

  • 运行以名称中的数字开头的可执行文件,并在前面加上&符号(&)。

    &7zip.exe

  • 包装每个令牌,该实用程序期望从命令行中看到引号。

    &“c:\ path with space \ SomeCommand.exe”“/ parameter2”“/ parameter2”“parameter2's Value”“Value2`”with quote“

试试这个:

zip filename.zip (Get-ChildItem somepath\*)

甚至:

zip filename.zip (Get-Content ListOfFiles.txt)

5
2017-08-11 15:07





詹姆斯霍尔威尔我喜欢你的答案,但我扩展了一点

# Example
#unzip "myZip.zip" "C:\Users\me\Desktop" "c:\mylocation"
function unzip($fileName, $sourcePath, $destinationPath)
{
    $shell = new-object -com shell.application
    if (!(Test-Path "$sourcePath\$fileName"))
    {
        throw "$sourcePath\$fileName does not exist" 
    }
    New-Item -ItemType Directory -Force -Path $destinationPath -WarningAction SilentlyContinue
    $shell.namespace($destinationPath).copyhere($shell.namespace("$sourcePath\$fileName").items()) 
}

2
2017-10-11 17:56





WinRAR的 可以在CMD模式下接受参数


0
2017-08-03 19:49





离子方法摇滚:

https://dotnetzip.codeplex.com/wikipage?title=PS-Examples

支持密码,其他加密方法等。


0
2018-01-13 22:53





我创建了一个PowerShell 2.0兼容模块,它使用本机Windows操作系统命令以同步方式压缩和解压缩文件。这适用于较旧的操作系统,如Windows XP,不需要.Net 4.5或任何其他外部工具。这些函数还将阻止脚本执行,直到文件全部压缩/解压缩。您可以 在我的博客上找到更多信息和模块


0
2018-05-02 22:13