Powershell v2 zip功能并非压缩一切

问题描述 投票:0回答:1

我不记得在哪里找到了导致我使用这个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

不知道我错过了什么,但似乎它正在压缩文件夹中文件的HALF。我刚刚在一个包含62个文件的文件夹中尝试了这个,最后我得到了一个包含31个文件的zip存档。

powershell zip powershell-v2.0
1个回答
0
投票

当你使用others have noticedShell.Application命令时,你遇到了与CopyHere()相同的问题。它是异步(非阻塞),不报告已完成的事件。

添加Sleep()对于大文件不能可靠地工作,因为Shell.Application对象将在它们完成之前被处理并与其子线程断开连接。

尝试重复检查目标文件是否存在,如链接的答案中所示。希望这可以帮助!

© www.soinside.com 2019 - 2024. All rights reserved.