3

全部!我正在尝试使用 PowerShell 编译程序,但该命令被奇怪地解析。此命令在 cmd.exe 中正确执行:

dmd -od"bin" -of"bin\convHull.exe" -I"src" "src\concSort.d" "src\fileParser.d" "src\main.d" "src\pointLogic.d" "src\quickHull.d" "src\stupidHull.d" -D -O -release

但 PowerShell 将其执行为:(蓝色海军紫色文本,因为它们出现在 PowerShell ISE 中)

dmd -od"bin" -of"bin\convHull .exe" -I"src" "src\concSort.d" "src\fileParser.d" "src\main.d" "src\pointLogic.d" "src \quickHull.d" "src\stupidHull.d" -D -O -release

这会吐出以下错误:

The string starting:
At line:1 char:147
+ dmd -od"bin" -of"bin\convHull.exe" -I"src" "src\concSort.d" "src\fileParser.d" "src\main.d"     
"src\pointLogic.d" "src\quickHull.d" "src\stupidHull.d <<<< " -D -O -release
is missing the terminator: ".
At line:1 char:163

所以它似乎将句号解释为引用。这很奇特。PowerShell 有没有其他人遇到过这个问题?

我尝试过的事情:

  1. 转义引号
  2. 确保所有引号都是“直引号”而不是倾斜的
  3. 在引号前加一个空格(正确解析,但程序不理解参数。)

谢谢,查尔斯。

4

2 回答 2

2

我相信这应该可以解决问题(仅为了清楚起见而添加了换行符,并删除了额外的引号):

dmd '-od"bin"' '-of"bin\convHull.exe"' '-I"src"'
    src\concSort.d src\fileParser.d src\main.d src\pointLogic.d src\quickHull.d src\stupidHull.d
    -D -O -release

请注意,在将引号 (")作为参数本身的一部分传递的情况下,我用单引号 (') 包围了整个参数。从下面的实验中可以看出, -of"..."需要关于它的引号。

快乐编码。


我找不到关于这个确切生产的好的参考,但是请注意以下解析:

-x“w。” -> 错误:“预期(最后一个”是特殊的)
-x"w."" -> -x"w and ."" (. 开始一个新标记,而 " in 开始
                           报价;但是,引号不会被删除)
'-x"w."' -> -x"w." (额外报价罚款,不特别)
-x"w" -> -x"w" (没有 . 和 " 不特殊)
-x"w"" -> -x"w"" (没有 . 和 " 不特殊)
a".b" -> ab(不以`-`开头,引号被删除)
a".b -> 错误:" 预期(" 是特殊的)

所以它确实似乎与.and-组合有关(它可能不是排他的)。从上面我相信一个以 开头的令牌- 包含该.字符作为令牌中的有效字符,因此词法分析器终止所述令牌并启动一个新令牌 - 可以通过良好的 EBNF 参考轻松证明,我没有。


我能找到的最好的是附录 C:PowerShell 语法

ParameterToken 规则用于匹配 cmdlet 参数,例如 -foo 或 -boolProp: 。请注意,此规则也将匹配 --foobar,因此必须在 --token 规则之前检查此规则。

<ParameterToken> = -[:letter:]+[:]{0 |1}

然而,这充其量是不完整的,甚至不包括“字母”的定义。

于 2011-07-30T00:26:02.460 回答
0

我没有可执行文件,但这似乎想要工作。

 $cmd = @'
 dmd -od"bin" -of"bin\convHull.exe" -I"src" "src\concSort.d" "src\fileParser.d" "src\main.d" "src\pointLogic.d" "src\quickHull.d" "src\stupidHull.d" -D -O -release
 '@

 &$cmd
于 2011-07-30T03:05:36.527 回答