在Powershell中的一个zip文件中添加多个文件夹

时间:2018-04-04 12:24:30

标签: powershell zip

也许我的问题可能是重复的,但我在PowerShell中是新的,并且无法弄清楚,我的脚本有什么问题,它会压缩特定的目录:

$path = "C:\backup\DEV82" 
if(!(Test-Path -Path $path )){
    New-Item -ItemType directory -Path $path
}

cd C:\inetpub\wwwroot\dev82\


$SOURCE = Get-ChildItem * -Directory|Where-Object {$_.FullName -match "App_Config|Resources|bin"}

$dtstamp = (Get-Date).ToString("yyyyMMdd_HHmmss")

Add-Type -assembly "system.io.compression.filesystem"
Foreach ($s in $SOURCE)
{
    $DESTINATION = Join-path -path $path -ChildPath "$dtstamp.zip"
    If(Test-path $DESTINATION) {
        Remove-item $DESTINATION
    }
    [io.compression.zipfile]::CreateFromDirectory($s.fullname, $DESTINATION)
}

如果我在$SOURCE变量中执行命令,它会收集所有必需的目录,我想要压缩http://prntscr.com/j0sqri

$ DESTINATION也会返回有效值

PS C:\> $DESTINATION
C:\backup\DEV82\20180404_223153.zip

但是现在只有zip文件中存在最后一个文件夹(参考资料)。

2 个答案:

答案 0 :(得分:1)

$SOURCE已经只是一个文件夹名称列表,因此您不需要FullName属性:

[io.compression.zipfile]::CreateFromDirectory($s.fullname, $DESTINATION)

要么删除它,要么从管道中删除Select-Object

$SOURCE = Get-ChildItem * -Directory | 
            Where-Object {$_.FullName -match "App_Config|Resources|bin"} |
                Select-Object -ExpandProperty FullName

答案 1 :(得分:1)

好的,我改写了我的脚本,使用了而不是Zipfile类,使用-Update压缩文件(-Update允许将文件\文件夹添加到现有存档中)

$path = "C:\backup\DEV82" 
if(!(Test-Path -Path $path )){
    New-Item -ItemType directory -Path $path
}

cd C:\inetpub\wwwroot\dev82\
$SOURCE = Get-ChildItem * -Directory|Where-Object {$_.FullName -match "App_Config|Resources|bin"}

$dtstamp = (Get-Date).ToString("yyyyMMdd_HHmmss")
$DESTINATION = Join-path -path $path -ChildPath "$dtstamp.zip"
Add-Type -assembly "system.io.compression.filesystem"
If(Test-path $DESTINATION) {
    Remove-item $DESTINATION
}

Foreach ($s in $SOURCE)
{
Compress-Archive -Path $s.fullname -DestinationPath $DESTINATION -Update
}