如何在MSBuild中的Exec Command中转义引号

145

我正在尝试构建一个MSBuild脚本,将网络驱动器映射到脚本中的驱动器号,但不幸的是,目标文件夹的路径包含一个嵌入式空格。这个嵌入式空格会导致映射失败,我不知道是否可以在路径周围转义引号。我尝试过双引号,但MSBuild不喜欢它(要么是Windows XP不喜欢它)。有人知道如何编写此代码以使映射正常工作吗?

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

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

4个回答

218

使用&quot;来对双引号进行编码,以便在Command属性值内正确显示net想要看到的双引号:

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

9
当你的命令是 Command="quot;$(PathWithTrailingBackslash)&quot;" 时,情况变得不好处理, 因为它会被渲染成 "Path\With\Trailing\Backslash\",而 \" 是命令行中表示 " 的转义序列,所以接下来的所有参数都会出问题。 - jnm2
@jnm2 你不能在第二个引号后面再加一个 &quot; 吗? Command="quot;$(PathWithTrailingBackslash)&quot;&quot;" - TetraDev
@TetraDev 然后反斜杠仍然缺失,您有一个未关闭的引号,其影响我不太确定。 - jnm2

97

1
对我来说,使用单引号而不是双引号是更好的解决方案。因为双引号可能会在尝试进行XmlPoke时导致问题,它会以一种有趣的方式处理空格字符:从“到&quot;。 - JavierD

2

0

正如@Michael-Freidgeim所述,解决此问题的方法是使用单引号,但在某些情况下,路径中的尾随斜杠(/)会被视为转义字符,避免这种情况的好方法是在任何文件夹路径后面加上一个点(.)


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