如何在 url 中使用带括号的 Invoke-Webrequest?
How is it possible to use Invoke-Webrequest with some parentheses in the url?
我在使用 Powershell 的 Invoke-Webrequest 功能时遇到问题。我知道如何使用它,但有些文件的文件名中有括号。这是 .ps1 文件的代码:
Invoke-Webrequest http://FreeZipFiles.com/FreeZipFile.zip -Outfile C:\Users\MyUserName\Desktop\test.zip
注意 FreeZipFiles.com 是 虚构的。 当我 运行 代码时,我得到这个错误:
FREE! : The term 'FREE!' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again.
At line:1 char:76
+ ... http://FreeZipFiles.com/FreeZipFile (FREE!). ...
+ ~~~
+ CategoryInfo : ObjectNotFound: (FREE!:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException
看了这个之后,我意识到括号表示“这是一个命令,运行它”,但它不是!
无论如何,提前致谢!
您的示例代码将 URL 显示为 http://FreeZipFiles.com/FreeZipFile.zip
但根据您的示例错误消息,我怀疑您遗漏了重要的部分,即 URL 具有其中有一个 space,类似于 http://FreeZipFiles.com/FreeZipFile.zip (FREE!)
.
在那种情况下,您应该确保引用 URL:
Invoke-WebRequest 'http://FreeZipFiles.com/FreeZipFile.zip (FREE!)' -Outfile C:\Users\MyUserName\Desktop\test.zip
第一种方法失败的原因是用作参数的未加引号的值被解释为字符串,但是由于 spaces 将参数和参数分开,因此您必须注意确保 spaces得到正确处理。通常这是通过引用完成的。
你也可以使用双引号,但是双引号可以扩展某些特殊字符。例如,如果您这样做:
Invoke-Webrequest "http://FreeZipFiles.com/$HOST/FreeZipFile.zip" -Outfile C:\Users\MyUserName\Desktop\test.zip
您可能会惊讶地发现 $HOST
最终会采用 PowerShell 中 $Host
变量的值,而不是字面意义。单引号不会那样解释变量。
从技术上讲,您可以使用反引号 `
对 space 进行转义,这是 PowerShell 中的转义字符,但是您还必须对括号本身进行转义:
Invoke-Webrequest http://FreeZipFiles.com/FreeZipFile.zip` `(FREE!`) -Outfile C:\Users\MyUserName\Desktop\test.zip
显然这并不理想,我添加它更多是出于好奇。
我在使用 Powershell 的 Invoke-Webrequest 功能时遇到问题。我知道如何使用它,但有些文件的文件名中有括号。这是 .ps1 文件的代码:
Invoke-Webrequest http://FreeZipFiles.com/FreeZipFile.zip -Outfile C:\Users\MyUserName\Desktop\test.zip
注意 FreeZipFiles.com 是 虚构的。 当我 运行 代码时,我得到这个错误:
FREE! : The term 'FREE!' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again.
At line:1 char:76
+ ... http://FreeZipFiles.com/FreeZipFile (FREE!). ...
+ ~~~
+ CategoryInfo : ObjectNotFound: (FREE!:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException
看了这个之后,我意识到括号表示“这是一个命令,运行它”,但它不是! 无论如何,提前致谢!
您的示例代码将 URL 显示为 http://FreeZipFiles.com/FreeZipFile.zip
但根据您的示例错误消息,我怀疑您遗漏了重要的部分,即 URL 具有其中有一个 space,类似于 http://FreeZipFiles.com/FreeZipFile.zip (FREE!)
.
在那种情况下,您应该确保引用 URL:
Invoke-WebRequest 'http://FreeZipFiles.com/FreeZipFile.zip (FREE!)' -Outfile C:\Users\MyUserName\Desktop\test.zip
第一种方法失败的原因是用作参数的未加引号的值被解释为字符串,但是由于 spaces 将参数和参数分开,因此您必须注意确保 spaces得到正确处理。通常这是通过引用完成的。
你也可以使用双引号,但是双引号可以扩展某些特殊字符。例如,如果您这样做:
Invoke-Webrequest "http://FreeZipFiles.com/$HOST/FreeZipFile.zip" -Outfile C:\Users\MyUserName\Desktop\test.zip
您可能会惊讶地发现 $HOST
最终会采用 PowerShell 中 $Host
变量的值,而不是字面意义。单引号不会那样解释变量。
从技术上讲,您可以使用反引号 `
对 space 进行转义,这是 PowerShell 中的转义字符,但是您还必须对括号本身进行转义:
Invoke-Webrequest http://FreeZipFiles.com/FreeZipFile.zip` `(FREE!`) -Outfile C:\Users\MyUserName\Desktop\test.zip
显然这并不理想,我添加它更多是出于好奇。