#1 楼
DotNetZip将允许您从PowerShell执行此操作。它不是单行的,但是该库允许您编写所需的PowerShell脚本。还可以使用COM界面,请参阅使用Windows PowerShell压缩文件,然后打包Windows Vista侧栏小工具。
谷歌搜索“ zip powershell”或“ unzip powershell”也可能会得到有用的结果。
评论
+1链接的文章具有有用的任务,与最受欢迎的答案不同
– Ruben Bartelink
2012年4月10日上午10:09
-1用于建议Google搜索。这是Google搜索“ unzip powershell”时排名靠前的StackExchange结果
–机器向往
15年8月20日在9:59
#2 楼
这是您完全可以从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())
评论
使用$ destination.Copyhere($ zip_file.items(),0x10)覆盖现有文件。 0x4隐藏对话框,而0x14组合这些内容并覆盖并隐藏对话框。
–彼得
2011年4月19日下午4:06
$ destination.Copyhere($ zip_file.items())行执行实际的解压缩。
–乔纳森·艾伦
2011-10-28 22:02
您可以根据需要将以上内容打包为一个函数:function unzip($ filename){if(!(test-path $ filename)){抛出“ $ filename不存在”}} $ shell = new-object -com shell .application $ shell.namespace($ pwd.path).copyhere($ shell.namespace((join-path $ pwd $ filename))。items())}
–詹姆斯·霍尔威尔(James Holwell)
2013年1月29日11:19
这应该是公认的答案。
–tugberk
13年4月19日在21:06
当zip文件仅包含一个文件夹(项目为空)时,这对我来说失败
–詹姆斯·伍尔芬登(James Woolfenden)
2014年8月19日在9:16
#3 楼
在.NET Framework 4.5中,现在有一个ZipFile类可以像这样使用:[System.Reflection.Assembly]::LoadWithPartialName('System.IO.Compression.FileSystem')
[System.IO.Compression.ZipFile]::ExtractToDirectory($sourceFile, $targetFolder)
评论
如果有一个简单的ExtractToDirectory方法和一个覆盖所有现有文件的选项,那将很好。
–詹姆斯·邓恩
13年4月2日,0:43
这适用于.NET 4.5。但是,您确实也需要Powershell V3。
– DalSoft
2013年6月16日19:29
用Add-Type加载程序集,例如:Add-Type -AssemblyName System.IO.Compression.FileSystem
–迈克
2013年9月19日下午2:39
@JamesDunne-如果没有其他需要保留的文件,可以使用“ Remove-Item -Recurse $ TargetFolder”。否则,您可以完成您想做的事情,但这并非易事。您需要打开zip进行阅读,然后遍历zip,删除以前的任何目标对象并解压缩新的对象。对我来说幸运的是,这种简单的解决方案有效。 ;)
–迈克
2013年9月19日在2:44
请注意,相对文件位置将使用.NET当前目录,而不是PowerShell目录。看这里。最好是将(Resolve-Path $ someDir).Path作为参数的路径。
– jpmc26
16年8月13日在3:45
#4 楼
您可能希望检出具有专门用于此目的的cmdlet的PowerShell社区扩展(PSCX)。评论
+1 PSCX是一组很棒的附加cmdlet-我只是希望我可以选择更多我想要的和我不需要的。在我的Powershell实例中,它似乎正在发生很大变化。
– marc_s
09年6月12日在7:48
之所以遇到这个问题是因为,如果可以的话,我实际上想自动化PSCX安装。现在尝试看看我遇到了什么样的问题
– jcolebrand
2011年4月27日在15:02
#5 楼
我知道这是一个非常老的问题,但我只是看到它在Twitter上的链接,以为我会发布当前答案。PowerShell 5,目前可在Windows 10或Windows Management Framework 5上使用。生产预览版,带有两个用于“压缩”和“解压缩”的内置cmdlet:
压缩存档
扩展存档
评论
为旧问题提供新信息是一件好事。 ;)+1
– jpmc26
16年8月13日在3:16
#6 楼
我找到了最简单的解决方案,仅使用多年来在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/
#7 楼
我也喜欢Info-ZIP(在大多数其他Zip实用程序中都可以找到的Zip引擎)和7-Zip,这是另一个同时具有GUI和命令行Zip实用程序的收藏。关键是,有一些优秀的命令行实用程序可用于大多数PowerShell任务。运行一些不是在PowerShell中构建的命令行实用程序的技巧:
运行以数字开头的可执行文件在名称中,以“&”号开头(&)。
&7zip.exe
包装每个令牌,该实用程序希望从命令行中看到,用引号引起来。
&“ c:\带有空格的路径\ SomeCommand.exe”“ / parameter2”“ / parameter2”“ parameter2的值”“ Value2`”用引号“
尝试一下:
zip filename.zip (Get-ChildItem somepath\*)
甚至:
zip filename.zip (Get-Content ListOfFiles.txt)
#8 楼
詹姆斯·霍尔威尔(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())
}
#9 楼
WinRAR可以在接受参数的CMD模式下工作#10 楼
离子方法的作用:https://dotnetzip.codeplex.com/wikipage?title=PS-示例
支持密码,其他加密方法等。
评论
相关:在服务器核心中使用PS解压缩