Powershell v2 zip功能不能压缩所有内容

时间:2018-09-26 17:47:12

标签: powershell zip powershell-v2.0

我不太记得在哪里找到了导致我使用此Powershell代码段的答案,但是我一直在使用此脚本压缩文件夹及其中包含的文件:

param (
[string]$ZipFrom,
[string]$ZipTo
)
function Add-Zip
{
    param([string]$zipfilename)

    if(-not (test-path($zipfilename)))
    {
        set-content $zipfilename ("PK" + [char]5 + [char]6 + ("$([char]0)" * 18))
    (dir $zipfilename).IsReadOnly = $false  
    }

    $shellApplication = new-object -com shell.application
    $zipPackage = $shellApplication.NameSpace($zipfilename)

    foreach($file in $input) 
    { 
        $zipPackage.CopyHere($file.FullName)
        Start-sleep -milliseconds 500
    }
}

If(Test-path $ZipTo) {Remove-item $ZipTo}

dir $ZipFrom -Recurse | Add-Zip $ZipTo

不知道我要缺少什么,但是好像压缩了一半文件夹中的文件。我只是在其中有62个文件的文件夹上尝试过此操作,最后得到了一个包含31个文件的zip存档。

1 个答案:

答案 0 :(得分:0)

在使用以下命令时,您遇到与others have noticed相同的问题 Shell.Application的{​​{1}}命令。它是异步的(非阻塞),不报告已完成的事件。

添加CopyHere()不能可靠地用于大文件,因为Sleep()对象将被处置,并在完成之前与其子线程断开连接。

尝试像链接答案一样反复检查目标文件的存在。希望这可以帮助!