Invoke-WebRequest结合Split-Path时提示路径含非法字符的原因
PowerShell下载文件报错原因及解决
核心原因
- 不可见字符搞的鬼:单独运行
Split-Path -Leaf时,输出的文件名肉眼看正常,但实际可能藏着换行符、回车符或者首尾空格。PowerShell把子命令输出直接传给-OutFile时,这些字符会被当成路径里的非法字符,触发报错。但手动复制的时候,剪贴板会自动过滤掉这些看不见的字符,所以文件名是干净的,命令自然能跑通。 - 子表达式输出的“原始性”:用
$(Split-Path -Leaf $url)当参数时,PowerShell会原封不动传递命令的输出(包括可能的尾随换行);而手动输入的是纯文本字符串,没有这些额外冗余。
怎么验证问题
运行下面的命令,看看文件名里有没有隐藏字符:
$fileName = Split-Path -Leaf "你的目标URL" $fileName | Format-Hex
如果十六进制结果末尾出现0D(回车)或0A(换行),就实锤是额外字符的问题。
解决办法
直接给Split-Path的输出加个Trim(),去掉首尾的空白和控制字符:
Invoke-WebRequest -Uri "你的目标URL" -OutFile $(Split-Path -Leaf "你的目标URL" | Trim)
或者先存变量再处理,更直观:
$fileName = (Split-Path -Leaf "你的目标URL").Trim() Invoke-WebRequest -Uri "你的目标URL" -OutFile $fileName
内容的提问来源于stack exchange,提问作者Michael Altfield
相关产品推荐
相关产品推荐

