等待复制过程完成

时间:2015-12-16 04:59:17

标签: powershell

有没有办法在运行另一个命令之前等待复制过程完成? 我尝试了Start-jobWait-Job,但它不起作用。

    $func = {
        function move-tozip
        {
        param([string]$filedest)
            $Shell = New-Object -com Shell.Application
            $b = $shell.namespace($zippath.ToString())
            $b.CopyHere($filedest.tostring())
            #Remove-Item -Path $filedest
        }
    }
start-job -InitializationScript $func -ScriptBlock {move-tozip $args[0]} -ArgumentList $file

1 个答案:

答案 0 :(得分:0)

等待作业完成的最简单方法是给它命名并告诉Wait-Job等待具有该名称的任务,您的脚本将等待名为WaitForMe的作业完成后再运行其余的代码。

-Name参数与下面的代码一起使用:

$func = 
{
    function Move-ToZip
    { 
      Param([string[]]$path, [string]$zipfile)

      if (-not $zipfile.EndsWith('.zip')) {$zipfile += '.zip'} 

      if (-not (test-path $zipfile))
      { 
        set-content $zipfile ("PK" + [char]5 + [char]6 + ("$([char]0)" * 18)) 
      }

      $shell = (new-object -com shell.application).NameSpace($zipfile) 

      foreach($file in $path)
      {
        $shell.CopyHere($file)
        start-sleep -milliseconds 100
      }
    } 
}


Start-Job -Name "WaitForMe" -InitializationScript $func -ScriptBlock {Move-ToZip -path $args[0] -zipfile $args[1]} -ArgumentList "D:\data.log", "D:\datazip.zip"

Write-Host "Waiting for job to complete"

Wait-Job -Name "WaitForMe"

Write-Host "Job has completed :D"

压缩一个文件或文件夹

-ArgumentList "D:\testfile.log", "D:\datazip.zip"

压缩多个文件或文件夹

-ArgumentList @("D:\testfile.log","D:\testFolder1"), "D:\testzip.zip"

编辑17/12/2015

我已将This MSDN blog的代码改编为Move-ToZip功能,因为之前的代码根本不适用于我,我已经在文件和文件夹上成功测试了上述代码。我没有测试过这种方法的性能,如果你想压缩/压缩多个大文件/文件夹,我强烈建议使用已知的工作库或第三方实用程序,如7zip。