如何在 MSBuild 的 Exec 命令中转义引号

Posted

技术标签:

【中文标题】如何在 MSBuild 的 Exec 命令中转义引号【英文标题】:How to escape quote marks in Exec Command in MSBuild 【发布时间】:2011-01-25 17:20:48 【问题描述】:

我正在尝试构建一个 MSBuild 脚本,将网络驱动器映射到脚本中的驱动器号,但不幸的是,目标文件夹的路径包含一个嵌入空间。嵌入的空间导致映射失败,不知道是否可以转义路径周围的引号。我试过双引号,但 MSBuild 不喜欢它(或者 Windows XP 不喜欢它)。任何人都知道如何为这个野兽编码以便地图工作?

<Exec Command="net use x: \\ofmapoly703\c$\program files\ar\iap /user:$(UserID) $(Password)"
WorkingDirectory="c:\"
ContinueOnError="false"
/>

嵌入空间当然出现在“程序文件”中。

【问题讨论】:

【参考方案1】:

使用&amp;quot; 对您希望netCommand 属性值内看到的双引号进行编码:

<Exec Command="net use x: &quot;\\ofmapoly703\c$\program files\ar\iap&quot; /user:$(UserID) $(Password)" 
WorkingDirectory="c:\" 
ContinueOnError="false" 
/> 

【讨论】:

这在你有Command="quot;$(PathWithTrailingBackslash)&amp;quot;" 时没有帮助,因为它呈现为"Path\With\Trailing\Backslash\",而\"" 的命令行转义序列,所以后面的所有参数都会搞砸。 @jnm2 你不能在第二个之后再添加一个&amp;quot; 吗? Command="quot;$(PathWithTrailingBackslash)&amp;quot;&amp;quot;" @TetraDev 然后反斜杠仍然丢失,并且您有一个未闭合的引号,我不太确定它的效果。【参考方案2】:

命令可以使用单引号,例如

  <Exec Command='explorer.exe "$(DestinationDir)"' IgnoreExitCode="true" />

(来自MSBuild exec task without blocking)

【讨论】:

对我来说使用单引号而不是 "这是一个更好的解决方案。因为“。当您尝试执行 XmlPoke 时,这可能会导致问题,它会以一种有趣的方式分隔字符:从 "到&quot;

以上是关于如何在 MSBuild 的 Exec 命令中转义引号的主要内容,如果未能解决你的问题,请参考以下文章

MSBuild exec 任务,退出代码为空

如何找出Visual Studio发送给MSBuild的命令?

如何通过命令行在 MSBuild 中指定 CodeAnalysisRuleset

MSBuild:如何将文件复制到由执行命令的输出确定的 DestinationFolder?

如何从正在处理的项目文件中访问 msbuild 命令行参数?

如何在别名中的 awk 命令中转义字段变量?