创建一个没有原始目录的Zip

时间:2014-04-15 14:45:39

标签: powershell zip archive

我试图从直接包含源目录内容的目录创建zip,而不是源目录,然后是内容,然后将内容上传到Azure。

所以我有C:\ temp \ aFolder,使用Write-Zip PSCXE

创建一个zip
write-zip c:\temp\test c:\temp\test2.zip

或Create-7zip功能

function create-7zip([String] $aDirectory, [String] $aZipfile){
    [string]$pathToZipExe = "C:\Program Files (x86)\7-zip\7z.exe";
    [Array]$arguments = "a", "-tzip", "$aZipfile", "$aDirectory", "-r";
   & $pathToZipExe $arguments;
}

create-7zip "c:\temp\test" "c:\temp\test.zip"

两种方式都将创建一个ZIP目录,其中包含源目录。

所以它将是:TEST.ZIP - >测试 - >为myContent。

我想要的是:TEST.ZIP - >为myContent。这可能吗?我无能为力。

非常感谢任何想法/帮助。

编辑:因为我无法回答我自己的问题

OH我的上帝。 @MJOLNIR再次救了我,我刚刚在另一篇文章中找到了答案。我道歉。

答案是使用(如果安装了.NET 4.5)

$src = "c:\temp\test"
$dst = "c:\temp\test3.zip"
[Reflection.Assembly]::LoadWithPartialName( "System.IO.Compression.FileSystem" )
[System.IO.Compression.ZipFile]::CreateFromDirectory($src, $dst)

将产生TEST.ZIP - >内容。

1 个答案:

答案 0 :(得分:0)

请注意.Net Framework 4.5之前不支持ZipFile类。

但实际上并不需要最新和最好的框架以及外部工具。这样的事情也应该有效:

$folder  = 'C:\temp\test'
$zipfile = 'C:\path\to\your.zip'

# create the zip file
$b = 'P', 'K', 5, 6 | % { [char]$_ }
$b += 1..18 | % { [char]0 }
[IO.File]::WriteAllBytes($zipfile, [byte[]]$b)

$app = New-Object -COM 'Shell.Application'

$src = $app.NameSpace($folder)
$dst = $app.NameSpace($zipfile)

# copy items from source folder to zip file
$dst.CopyHere($src.Items())

# wait for copying to complete
do {
  Start-Sleep -Milliseconds 200
} until ($src.Items().Count -eq $dst.Items().Count)