我有一个脚本foo.cmd
:
echo %1 %2
在PowerShell中我运行:
foo.cmd "a,b" "c"
预期输出:a,b c
实际输出:a b
为什么?
答案 0 :(得分:0)
在PowerShell解析命令行并将其传递给CMD执行后删除双引号,因此CMD实际上看到了一个语句
foo.cmd a,b c
由于逗号是CMD的delimiter characters之一,该陈述相当于
foo.cmd a b c
要避免此行为,您需要确保在将参数传递给CMD时保留双引号。有几种方法可以实现这一目标。例如,您可以将双引号参数放在单个qoutes中:
foo.cmd '"a,b"' "c"
并将批处理脚本中的位置参数更改为%~1
,%~2
,以便CMD从参数中删除双引号。
如果你有PowerShell v3或更新版本,你可以使用"magic parameter" --%
来避免嵌套引号:
foo.cmd --% "a,b" "c"
但是,批处理脚本中仍然需要%~1
和%~2
。