如果 invoke-webrequest 由于无效/过期的 url 而失败,如何回显否则继续在 Powershell CLI 中下载?

问题描述 投票:0回答:1

我想在批处理文件中使用 powershell 命令来下载文件。

我的代码看起来像那样,并且只适用于从该特定 url 下载文件:

powershell "$progresspreference='silentlycontinue'; wget -uri "https://thisismyurl.com/123456" -outfile '%userprofile%\Downloads\file.zip'"

现在我想实施

echo download failed! url is invalid. & pause & goto label
如果
invoke-webrequest
由于无效或过期的url而失败。

此外,由于批处理文件中的 powershell 命令变得很长,有没有办法分解这些命令?

我试过了

powershell "$progresspreference='silentlycontinue' `
wget -uri "https://thisismyurl.com/123456" -outfile '%userprofile%\Downloads\file.zip'"

但这没有用。

powershell batch-file cmd invoke-webrequest
1个回答
0
投票
  • 您正在使用隐含的 powershell.exe

     参数调用 Windows PowerShell CLI 
    -Command
    ,这意味着命令字符串中last 语句 的成功状态决定了
    powershell.exe
    的退出代码:
    0
    在成功案例中,
    1
    否则。

    • 在 Windows PowerShell 中,

      wget
      Invoke-WebRequest
      cmdlet 的别名,与任何 cmdlet 一样,如果在执行期间出现 any 错误,则其成功状态被视为
      $false
      ,因此转换为退出代码
      1
      .

    • 因此,您可以简单地使用

      cmd.exe
      ||
      运算符来处理
      powershell.exe
      的退出代码为非零的情况。

  • 至于 multiline 从批处理文件调用 PowerShell CLI,请参阅this answer。简而言之:您不能使用整体

    "..."
    外壳,因此必须
    ^
    -escape 选择字符,并且必须以
    ^

    结束每个内部行

将它们放在代码的上下文中:

@echo off & setlocal

powershell $progresspreference='silentlycontinue'; ^
  wget -uri 'https://thisismyurl.com/123456' ^
       -outfile '%userprofile%\Downloads\file.zip' ^
  || (echo download failed! url is invalid. & pause & goto label)

exit /b 0

:label
  echo failure-handling branch...
exit /b 1
© www.soinside.com 2019 - 2024. All rights reserved.