it-swarm.cn

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

在PowerShell中是否存在一种可以Zip /解压缩文件(* .Zip)的单行代码?

105
BlueGene

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

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

谷歌搜索“ Zip powershell”或“ unzip powershell”也可能会得到有用的结果。

21
Kevin Kuphal

这是您完全可以通过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())
155
Ameer Deen

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

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

您可能希望签出 PowerShell社区扩展(PSCX) ,其中包含专门用于此目的的cmdlet。

18
Kevin Colby

我知道这是一个非常老的问题,但是我只是看到它在Twitter上的链接,以为我会发布当前答案。

当前在Windows 10上或通过 Windows管理框架5生产预览 提供的PowerShell 5带有两个内置的cmdlet,用于“压缩”和“解压缩”:

16
Windos

我找到了最简单的解决方案,只使用我已经使用多年并且在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
Brian Reiter

我还喜欢 Info-Zip (在大多数其他Zip实用程序中找到的Zip引擎)和 7-Zip ,这是同时具有GUI和命令行Zip实用程序的另一个收藏夹。关键是,有一些优秀的命令行实用程序可用于大多数PowerShell任务。

有一些运行命令行实用程序的技巧,这些技巧不是在考虑使用PowerShell构建的:

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

    &7Zip.exe

  • 实用程序希望在命令行中用引号将每个令牌包装起来。

    &“ c:\带有空格的路径\ SomeCommand.exe”“/parameter2”“/parameter2”“参数2的值”“值2`”用引号引起来“

尝试这个:

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

甚至:

Zip filename.Zip (Get-Content ListOfFiles.txt)
5
Nathan Hartley

詹姆斯·霍尔威尔(James Holwell),我喜欢您的回答,但我扩大了一点

# 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
Nico

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

0
deadlydog

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

0
adopilot

ionic接近方法:

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

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

0