如何处理PowerShell命令中的点?

17

以下命令可在命令行中使用

mvn clean install -Denunciate.skip 

但在 Powershell 中出现了错误中断:

[ERROR] 未知的生命周期阶段“。skip”。您必须按照以下格式指定有效的生命周期阶段或目标:

3个回答

24

在编写实际的PowerShell代码时,使用引号可以帮助你。但是,如果你只是想使用普通命令,你可以使用stop-parsing参数来避免PowerShell解析器错误地解释你的代码。

在Windows PowerShell 3.0中引入的停止解析符号(--%)指示Windows PowerShell不要将输入解释为Windows PowerShell命令或表达式。

在Windows PowerShell中调用可执行程序时,请在程序参数之前放置停止解析符号。这种技术比使用转义字符来防止误解释要容易得多。

因此,对于你的命令,你也可以这样做。

mvn --% clean install -"Denunciate.skip"

如果您在其中混合了变量,则只需根据需要移动停止解析器即可。


7

通过反复尝试,我得出这个结论(我将Denunciate.skip作为字符串处理,并用引号括起来)

 mvn clean install -"Denunciate.skip"

0
我觉得我需要确认并补充developer747的答案。双引号需要完全包裹每个参数,以便PowerShell停止处理参数内容。(不要在参数中深入放置双引号,比如-foo.bar="baz")。
еЬ® PowerShell жПРз§Їзђ¶дЄЛпЉЪ
```function detect() { write-host "in detect"; write-host "arg 0: $($args[0])"; write-host "arg 1: $($args[1])"; } exit detect "-foo.bar=baz"```
иЊУеЗЇпЉЪ
``` in detect arg 0: -foo.bar=baz arg 1: ```
еЬ® PowerShell жПРз§Їзђ¶дЄЛпЉЪ
```function detect() { write-host "in detect"; write-host "arg 0: $($args[0])"; write-host "arg 1: $($args[1])"; } exit detect -foo.bar=baz```
иЊУеЗЇпЉЪ
``` in detect arg 0: -foo arg 1: .bar=baz ```
еЬ® PowerShell жПРз§Їзђ¶дЄЛпЉЪ
```function detect() { write-host "in detect"; write-host "arg 0: $($args[0])"; write-host "arg 1: $($args[1])"; } exit detect -foo.bar="baz"```
иЊУеЗЇпЉЪ
``` in detect arg 0: -foo arg 1: .bar=baz ```

要将CMD中的双引号传递给PowerShell,我不得不在它们前面加上反斜杠(而不是插入符!)

在CMD提示符下:

powershell -Command function detect() { write-host "in detect"; write-host "arg 0: $($args[0])"; write-host "arg 1: $($args[1])"; } exit detect \"-bar.foo=baz\"

在detect中
arg 0: -bar.foo=baz
arg 1:

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接