Warm tip: This article is reproduced from serverfault.com, please click

其他-批处理文件中的错误处理powershell命令

(其他 - Error-Handle powershell command in Batch File)

发布于 2020-11-28 03:13:29

我还无法弄清楚如何才能使它正常工作。

我希望它像提取zip一样提取zip,但是如果失败(错误图片),我希望它删除zip并再次卷曲它。

出现错误的原因是zip损坏,即用户在初始zip安装过程中关闭了程序。

if EXIST "%UserProfile%\Downloads\100 Player Among US.zip" (
        echo "---Zip Detected, Extracting it now---"
        powershell -Command "Expand-Archive -Force '%UserProfile%\Downloads\100 Player Among US.zip' '%UserProfile%\Downloads\'"

        if There is an error  (
        DEL "%UserProfile%\Downloads\100 Player Among US.zip"
        echo "---Corrpupted Zip, I'm installing it again---"
        curl "link"
        )
    )
Questioner
Wolfhound905
Viewed
11
zett42 2020-11-28 17:59:35

为了能够处理批处理脚本中的Powershell错误,必须在发生错误的情况下从Powershell返回非零退出代码。

在以下情况下,Powershell返回一个非零的退出代码:

  • 该脚本使用以下exit N语句终止,其中N指定一个非零的退出代码。
  • 没有捕获到终止错误,因此它“删除”了脚本。
  • 脚本中的语法错误,例如无效的命令。

默认情况下,Expand-Archive提取失败时会引起非终止错误。我们可以通过传递通用参数 -ErrorAction Stop或通过在调用命令之前设置首选项变量 来将其转换为终止错误$ErrorActionPreference = 'Stop'

使用-ErrorAction参数的示例

powershell -Command "Expand-Archive -ErrorAction Stop -Force '%UserProfile%\Downloads\100 Player Among US.zip' '%UserProfile%\Downloads\'"
if ERRORLEVEL 1 (
   :: Handle the error
)

使用示例$ErrorActionPreference

powershell -Command "$ErrorActionPreference='Stop'; Expand-Archive -Force '%UserProfile%\Downloads\100 Player Among US.zip' '%UserProfile%\Downloads\'"
if ERRORLEVEL 1 (
   :: Handle the error
)

设置$ErrorActionPreference变量可以简化运行多个命令的脚本。