You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell脚本命令行参数传递问题:如何将整串文本作为单个参数读取?

解决PowerShell脚本接收带空格的命令行参数问题

我来帮你搞定这个参数传递的坑!你遇到的是PowerShell调用脚本时常见的参数解析歧义,尤其是在不同控制台(PowerShell vs cmd)里运行命令时,引号的处理逻辑差异会导致参数拆分不符合预期。

为什么你的命令会输出A B This?

当你执行powershell test.ps1 A B "This is a test"时,默认情况下PowerShell会把后面的内容当作-Command参数来解析。如果是在cmd.exe里运行这个命令,cmd会先处理外层的引号——它会把"This is a test"的引号直接去掉,然后把This is a test拆分成四个独立的单词传递给PowerShell。最终你的脚本test.ps1接收到的参数列表是:A、B、This、is、a、test。如果你脚本里只输出了前三个参数,自然就得到A B This的结果。

正确的解决办法

根据你运行命令的环境,分两种情况处理:

情况1:在PowerShell控制台里直接运行脚本

这是最省心的场景,直接用脚本的相对路径调用,PowerShell会正确识别引号包裹的带空格字符串:

.\test.ps1 A B "This is a test"

此时脚本会收到三个参数:A、B、This is a test,完全符合你的预期。

情况2:在cmd.exe里运行,或通过外部程序调用

如果必须通过powershell.exe启动脚本,一定要加上-File参数——这个参数会告诉PowerShell直接把后续参数原封不动传递给脚本,不做额外解析:

powershell -File test.ps1 A B "This is a test"

另外也可以用-Command参数配合转义引号实现,但相对繁琐:

powershell -Command ".\test.ps1 A B `"This is a test`""

验证脚本的参数接收情况

为了确认脚本确实拿到了正确的参数,可以修改test.ps1内容,输出所有接收的参数:

Write-Host "总共收到 $($args.Count) 个参数:"
foreach ($index in 0..($args.Count-1)) {
    Write-Host "参数 $($index+1):'$($args[$index])'"
}

运行正确的命令后,你会看到如下输出:

总共收到 3 个参数:
参数 1:'A'
参数 2:'B'
参数 3:'This is a test'

内容的提问来源于stack exchange,提问作者DavidH

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 09:54:14