PowerShell字符串参数内含带根路径的-Path参数报错问题咨询
报错根本原因
PowerShell解析命令行参数时,会把符合-[参数名]:[值]格式的内容优先识别为参数绑定语法,而非普通字符串。当你传入"-Path C:/a/b/c"时,盘符后的冒号刚好和前面的-Path组合成了参数语法结构,PowerShell会误认为你是要给脚本的Path参数传值C:/a/b/c,而你原本指定的-B参数就被判定为没有传入有效值,所以抛出「Missing an argument for parameter 'B'」的错误。
不同调用模式的报错逻辑
-Command 参数调用报错原因
使用-Command参数时,PowerShell会先对后面的所有内容做一轮表达式解析,外层的双引号/单引号会在解析阶段被脱掉,导致-Path a/b/c被拆成两个独立的参数传入脚本,所以会提示找不到接受a/b/c的位置参数。
-File 参数调用报错原因
-File模式下PowerShell对参数的解析更宽松,普通的"-Path a/b/c"不会被误判,但只要出现-xxx:前缀的结构就会触发参数解析逻辑,这也是为什么只有带盘符的路径会报错,Unix风格路径不带盘符冒号就不会触发问题。
解决方案
不需要单独转义冒号,用以下任意一种方式即可规避解析问题:
- 外层嵌套引号,让PowerShell明确识别为字符串:
pwsh.exe -Command "./hello.ps1 -A 123 -B '-Path C:/a/b/c'" - 配合脚本块包裹执行逻辑,避免参数被提前解析:
pwsh.exe -Command "& {./hello.ps1 -A 123 -B '-Path C:/a/b/c'}" - 如果一定要用
-File模式,可将路径转换为/c/格式的Unix风格路径:pwsh.exe -File .\hello.ps1 -A 123 -B "-Path /c/a/b/c"
内容的提问来源于stack exchange,提问作者CandyRedTele
相关产品推荐
相关产品推荐

