逗号分开输入参数?

时间:2016-02-24 00:27:26

标签: powershell batch-file cmd

我有一个脚本foo.cmd

echo %1 %2

在PowerShell中我运行:

foo.cmd "a,b" "c"

预期输出:a,b c
实际输出:a b

为什么?

1 个答案:

答案 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