在删除之前等待压缩文件

时间:2014-11-19 08:53:09

标签: powershell

我在删除文件之前使用zip函数来压缩文件,但是在zip完成之前会调用delete函数,因此我会丢失数据。

我如何调用这些函数:

gi $archiveMonthFolder | out-zip $auditDir$zipFolderName.zip $_

#Delete any file in the archive folder
deleteFiles $sourceArchiveDir

我的职能:

function out-zip {
  $path = $args[0]
  $files = $input

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

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

  $ZipFile = (new-object -com shell.application).NameSpace($path) 
  $files | foreach {$zipfile.CopyHere($_.fullname)} 
}

function deleteFiles{
  # The parameter. 
  param([string]$sourceDir) 

  #Delete the files
  Remove-Item -Path "$sourceDir\*" -Recurse
}

我尝试使用| out-null,但这有同样的效果。

3 个答案:

答案 0 :(得分:2)

我建议安装.Net Framework 4.5(如果您还没有),并使用其ZipFile类。 CreateFromDirectory()方法同步运行,这意味着它仅在操作完成后返回,因此您可以在之后简单地运行删除:

[void][Reflection.Assembly]::LoadWithPartialName('System.IO.Compression.FileSystem')

$src = 'C:\source\folder'
$zip = 'C:\path\to\your.zip'

[IO.Compression.ZipFile]::CreateFromDirectory($src, $zip, 'Optimal', $false)

Remove-Item -Path "$src\*" -Recurse

如果您不希望从压缩路径中删除父文件夹,请将$false替换为$true

答案 1 :(得分:0)

我希望在删除调用之前检查ZIP文件是否有用,如下所示:

gi $archiveMonthFolder | out-zip $auditDir$zipFolderName.zip $_

#Delete any file in the archive folder
do
{
     Start-Sleep -s 10
}while ((Test-Path $auditDir$zipFolderName.zip) -eq $false)

deleteFiles $sourceArchiveDir

答案 2 :(得分:0)

您可以使用“wait process”命令。

我希望此代码段能为您提供帮助。

$ZipId = (get-process 7zFM).id
if($ZipId)
{
    wait-process -id $ZipId    
    Write-host "Zipper is closed, now delete the file and wash your hands"

}
else
{
    Write-host "No zipper found, Im not even sure i have pants... Move along"
}