PowerShell含空格参数传递异常问题排查与解决
SendLet脚本:Windows资源管理器“发送到”快捷方式参数传递问题排查与解决
脚本代码(SendLet.ps1)
param ( [Parameter(ValueFromRemainingArguments=$true)] $FilePath ) Get-ChildItem -Recurse -Path $FilePath | ForEach-Object { Write-Host $_ } Pause
测试环境
- PowerShell版本:7.3.2
- 测试文件夹:
Arbitrary Files(包含两个带空格的文件:Baz qux.AVI、Foo bar.JPG)
部署步骤
- 将脚本保存至路径:
C:\Users\user\Documents\PowerShell\Scripts\SendLet.ps1 - 打开
shell:sendto文件夹,创建快捷方式,目标设置为:C:\Users\user\AppData\Local\Microsoft\WindowsApps\pwsh.exe C:\Users\user\Documents\PowerShell\Scripts\SendLet.ps1 - 通过Windows资源管理器右键菜单的“发送到”选项调用脚本处理文件/文件夹
运行现象
- Windows 11 22H2:运行正常,可正确识别带空格的路径并输出文件列表
- Windows 10 Pro 22H2:运行报错,提示找不到路径;进一步测试发现C盘文件可正常处理,D盘文件异常,且带空格的路径被拆分为多个参数(Win11中则作为单个带引号的参数传递)
问题定位与解决
对比两台系统的pwsh.exe路径:
- Win11:指向真实程序路径
C:\Program Files\PowerShell\7\pwsh.exe - Win10:指向
C:\Users\user\AppData\Local\Microsoft\WindowsApps\pwsh.exe(该文件为0字节的链接文件)
将快捷方式的目标改为指向真实的pwsh.exe程序路径后,参数传递恢复正常,问题解决。
内容的提问来源于stack exchange,提问作者mrkskwsnck
相关产品推荐
相关产品推荐

