3

我有一个应用程序应该可以在构建前和构建后事件处理方面帮助我的项目。我正在使用 ndesk.options 进行命令行参数解析。当我的项目路径包含空格时,这给了我奇怪的结果。我认为这是 ndesk.options 的错,但我想应该归咎于我自己的应用程序。我将我的应用程序称为构建后事件,如下所示:

build.exe --in="$(ProjectDir)" --out="c:\out\"

args[] 上的简单 foreach 显示以下内容:

--in=c:\my project" --out=c:\out"

发生的事情是每个参数中的最后一个 " 被视为已转义。因此,尾部的反斜杠被删除了。整个事情被视为单个参数。

现在我认为我只是简单地逃避第一个“也很聪明,就像这样:

build.exe --in=\"$(ProjectDir)" --out=\"c:\out\"

在这种情况下,生成的 args[] 如下所示:

--path="c:\my
project"
--out="c:\out"

参数中的尾部反斜杠仍然被吞下,第一个参数现在被拆分。

将此 args[] 传递给 ndesk.options 将产生错误的结果。

正确的命令行应该如何显示,以便正确的元素最终出现在正确的 args[] 插槽中?或者,应该如何解析带有或不带有 ndesk.options 的命令行参数?欢迎任何建议。

提前致谢

4

2 回答 2

8

您是否尝试逃避最后一个反斜杠?

build.exe --in="$(ProjectDir)\" --out="c:\out\\"

这可能仅适用于应该给出ProjectDir的结尾。这只是一个想法,但我没有尝试\

编辑:
我发现一条评论建议省略尾随"

于 2010-03-23T22:34:20.510 回答
2

我实际上使用了“。” 解决同样的问题:

build.exe --in="$(ProjectDir)." --out="c:\out\."

主要是因为否则它可能看起来像你试图逃避第二个引号......你不是,你正在逃避最后的 \ (这是隐藏的)。我还在 postbuild 命令中添加了一个 REM,描述了我这样做的原因。

于 2016-11-28T16:36:03.867 回答