我想在批处理文件中使用 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.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