一切!我正在尝试使用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 < / p>
这会吐出以下错误:
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时遇到此问题?
我尝试过的事情:
谢谢, 查尔斯。
答案 0 :(得分: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." -> error: " expected (last " is special) -x"w."" -> -x"w and ."" (the . starts a new token and the " in that starts a quote; however, the quotes are not removed) '-x"w."' -> -x"w." (extra quote fine, neither special) -x"w" -> -x"w" (no . and " not special) -x"w"" -> -x"w"" (no . and " not special) a".b" -> a.b (didn't start with `-`, quotes removed) a".b -> error: " expected (" is special)
所以它似乎确实与.
和-
组合有关(它可能不是独占的)。从上面我相信以-
开头的令牌不包含.
字符作为令牌中的有效字符,因此词法分析器终止所述令牌并启动新令牌 - 很容易通过良好的EBNF参考证明,我没有。
我能找到的最好的是Appendix C: The PowerShell Grammar:
ParameterToken规则用于匹配cmdlet参数,例如-foo或 - boolProp :.请注意,此规则也将匹配--foobar,因此此规则具有 在--token规则之前检查。
<ParameterToken> = -[:letter:]+[:]{0 |1}
然而,这最多是不完整的,甚至不包括“字母”的定义。
答案 1 :(得分: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