我在删除文件之前使用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
,但这有同样的效果。
答案 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"
}