$ lastExitCode不适用于7-Zip更新

时间:2017-01-03 18:01:12

标签: powershell 7zip

我正在尝试做的是备份一些数据库,部分过程是将它们压缩起来,这样它们不仅在一个文件中,而且在一个较小的文件中,所以我有以下代码。

# 0 = Sunday, 1 = Monday, 2 = Tuesday, 3 = Wednesday, etc

$blocation = 'c:\SQLBackups'
$7zlocation = 'c:\Program Files\7-Zip\7z.exe'
$date = Get-Date
$daynum = [int]$date.DayOfWeek

$month = Get-Date -Format MM
$day = (Get-Date).AddDays(0).ToString('dd')
$sqlfile = "*_backup_" + $date.Year + "_" + $month + "_" + $day + "_*.bak"

cd $blocation
& $7zlocation d ABOCH2_SQL_backup.zip *.bak
& $7zlocation u ABOCH2_SQL_backup.zip *.bak
if($lastExitCode -eq 0) {
  del /q *.bak
}

从以前的运行中清空.zip文件后,使用新转储的数据库更新.zip文件,然后仅在.zip成功更新后删除数据库。我面临的问题是,在运行此问题后,.zip文件将使用新数据库进行更新。但是,$lastExitCode不起作用,因此成功添加到.zip的数据库永远不会被删除,最终会积累旧的数据库积压。

我错过了什么,或者出了什么问题?

1 个答案:

答案 0 :(得分:2)

我猜你的删除操作实际上是失败的。我会质疑这是如何被调用的,或者你可能正在压制错误。执行时del /q *.bak的行应该出现以下错误:

Remove-Item : A positional parameter cannot be found that accepts argument '*.bak'.
At line:1 char:1
+ del /q *.bak
+ ~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (:) [Remove-Item], ParameterBindingException
    + FullyQualifiedErrorId : PositionalParameterNotFound,Microsoft.PowerShell.Commands.RemoveIt 
   emCommand

如果您运行命令Get-Alias del,您会看到" del"是Remove-Item cmdlet的别名。也许你的$lastexitcode逻辑是合理的?我会选择使用PowerShell方式删除这些文件:

Remove-Item *.csv -Confirm:$false

或者如果你想要,你可以使用cmd

cmd.exe /c "del /q *.bak"