$lastExitCode 不适用于 7-Zip 更新

$lastExitCode not working for 7-Zip update

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

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

$blocation = 'c:\SQLBackups'
zlocation = 'c:\Program Files-Zipz.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
& zlocation d ABOCH2_SQL_backup.zip *.bak
& zlocation u ABOCH2_SQL_backup.zip *.bak
if($lastExitCode -eq 0) {
  del /q *.bak
}

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

我是不是遗漏了什么,或者哪里出了问题?

我猜你的删除操作实际上是失败的。我会质疑这是如何被调用的,或者你可能正在抑制错误。执行时具有 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"