创建文件夹的zip,然后删除内容

时间:2016-11-02 03:05:41

标签: powershell

我有一个简单的文件夹结构,我需要压缩上传到AWS Lambda函数

node-modules/
index.js
package.json

上面的文件位于根目录中。基本上最终目标是我想要所有这些文件和子文件/目录的zip,而不是原样的结构。

当我尝试运行下面的命令时,它说它无法访问E://apps/myapp/release.zip,因为它被另一个进程使用。但是我可以看到它开始创建release.zip,但它没有所有内容。

Add-Type -Assembly "System.IO.Compression.FileSystem";
[System.IO.Compression.ZipFile]::CreateFromDirectory(E://apps/myapp, E://apps/myapp/release.zip);

所以我尝试了另一种方法。获取文件夹和两个文件并将它们复制到一个临时文件夹中,然后尝试将其压缩回根目录。

Copy-Item E://apps/myapp E://apps/myapp/temp -recurse

我确实看到了一个temp/文件夹,但在临时文件夹中,它就像一个永无止境的副本,直到文件路径太长。

任何提示都会非常感激。

1 个答案:

答案 0 :(得分:3)

问题可能是您正在尝试压缩的同一文件夹中创建zip文件。当你尝试使用临时文件夹时,你基本上做同样的事情,因此开始。

尝试在被压缩的源文件夹之外创建目标。

$source = "E://apps/myapp"
$destination = "E://apps/myapp.release.zip"

# If the archive already exists, an IOException exception is thrown.
if(Test-Path $destination) {
    Remove-Item -Path $destination -Force -Recurse -Confirm:$false
}

[Reflection.Assembly]::LoadWithPartialName( "System.IO.Compression.FileSystem" )
[System.IO.Compression.ZipFile]::CreateFromDirectory($source, $destination)

# Once archive created delete folder
if(Test-Path $destination) {
    Remove-Item -Path $source -Force -Recurse -Confirm:$false
    Write-Host "directory removed: $source"
}